Configurare MySQL per poter utilizzare le maiuscole nei nomi delle tabelle

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:

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:

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.