I nomi delle tabelle in MySQL sono sensibili al maiuscolo / minuscolo?

I nomi delle tabelle in MySQL sono sensibili al maiuscolo / minuscolo?

Sulla mia macchina di sviluppo di Windows il codice che ho è in grado di interrogare le mie tabelle che sembrano essere tutte in minuscolo. Quando eseguo il deploy sul server di test nel nostro datacenter, i nomi delle tabelle sembrano iniziare con una lettera maiuscola.

I server che usiamo sono tutti su Ubuntu.

In generale:

I nomi di database e tabelle non sono case sensitive in Windows e case sensitive nella maggior parte delle varietà di Unix.

In MySQL, i database corrispondono alle directory all’interno della directory dei dati. Ogni tabella all’interno di un database corrisponde ad almeno un file all’interno della directory del database. Di conseguenza, la distinzione tra maiuscole e minuscole del sistema operativo sottostante ha un ruolo nella distinzione tra maiuscole e minuscole dei nomi di database e tabelle.

Si può configurare il modo in cui i nomi delle tabelle sono memorizzati sul disco usando la variabile di sistema lower_case_table_names . (nella configurazione my.cnf sotto [mysqld])

Leggi la sezione: 10.2.2 Sensibilità case sensitive per ulteriori informazioni.

I nomi di database e tabelle non sono case sensitive in Windows e case sensitive nella maggior parte delle varietà di Unix o Linux.

per risolvere il problema, imposta lower_case_table_names su 1

lower_case_table_names = 1

questo renderà tutti i tuoi tavoli in minuscolo, indipendentemente da come li scrivi

I nomi delle tabelle in MySQL sono voci del file system, quindi non fanno distinzione tra maiuscole e minuscole se il file system sottostante è.

Dipende dalla variabile di sistema lower_case_table_names :

 show variables where Variable_name='lower_case_table_names' 

Ci sono tre possibili valori per questo:

  • 0 – lettera maiuscola specificata nell’istruzione CREATE TABLE o CREATE DATABASE . I confronti tra nomi sono case sensitive.
  • 1 – I nomi delle tabelle sono memorizzati in minuscolo su disco e i confronti tra nomi non fanno distinzione tra maiuscole e minuscole.
  • 2 – lettere maiuscole specificate nell’istruzione CREATE TABLE o CREATE DATABASE , ma MySQL le converte in lettere minuscole durante la ricerca. I confronti tra nomi non sono case sensitive.

Documentazione

  1. Individua il file in /etc/mysql/my.cnf

  2. Modifica il file aggiungendo le seguenti righe:

    [mysqld]

    lower_case_table_names=1

  3. sudo /etc/init.d/mysql restart

  4. eseguire mysqladmin -u root -p variables | grep table mysqladmin -u root -p variables | grep table per verificare che lower_case_table_names sia 1 ora

Potrebbe essere necessario ricreare queste tabelle per farlo funzionare