La configurazione predefinita delle versioni Win32 e Win64 di MySQL prevede che i nomi delle tabelle vengano convertiti in minuscolo prima di essere memorizzati su disco. Questa feature può provocare alcune scomodità a chi lavora con strumenti che generano automaticamente codice partendo dall'analisi del DB (Entity Framework, per citare uno tra i più usati), prima tra tutte l'impossibilità di avere delle classi con l'iniziale del nome in maiuscolo o in stile camelCase. Non tutti sanno che per ovviare a questo problema si può ricorrere a una variabile di sistema poco nota da inserire nel file di configurazione di MySQL che consente, per l'appunto, di determinare le modalità di memorizzazione e recupero dei nomi delle tabelle del Database.
Il comando in questione si chiama
lower_case_table_names
e può essere inserito nel file my.cfg , che solitamente si trova nella cartella:C:\Program Files (x86)\MySQL\MySQL Server 5.6\
Una volta aperto è sufficiente inserire la variabile sotto la sezione [mysqld] nel seguente modo:
1 2 3 |
... [mysqld] lower_case_table_names = 2 |
I valori possibili sono:
- 0: I nomi delle tabelle e dei database vengono memorizzati rispettando le maiuscole/minuscole presenti nell'istruzione CREATE TABLE. La necessità di rispettare le maiuscole/minuscole si estende anche a tutte le query (SELECT * FROM STUDENTS e SELECT * FROM students produrranno risultati diversi in quanto cercheranno tabelle diverse). Questo valore è il predefinito delle versioni MySQL per Linux ma non è adatto per quei sistemi il cui file-system non è case-senstitive (Windows, OSX) in quanto potrebbe comportare alcuni problemi ai file degli indici.
- 1: I nomi delle tabelle e dei database vengono convertiti in minuscolo (lowercase) prima di essere memorizzati. Questo valore è il predefinito delle versioni MySQL per Windows: il vantaggio rispetto al precedente è che consente una ricerca di tipo case-insensitive (SELECT * FROM STUDENTS e SELECT * FROM students produrranno lo stesso risultato); lo svantaggio è che non è possibile utilizzare le maiuscole, cosa che ci riporta al problema iniziale.
- 2: I nomi delle tabelle e dei database vengono memorizzati rispettando le maiuscole/minuscole presenti nell'istruzione CREATE TABLE, ma vengono convertiti in minuscolo (lowercase) al momento di risolvere qualsiasi query di ricerca. In buona sostanza questa impostazione è un ibrido delle opzioni 0 e 1 ed è, nella maggior parte dei casi, l'opzione preferibile per i sistemi Windows e OSX in quanto consente di utilizzare le maiuscole nei nomi delle tabelle senza alcuna controindicazione a livello di ricerca.
Per una trattazione più approfondita della variabile di sistema
lower_case_table_names
suggeriamo di consultare la guida ufficiale di MySQL: