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. I campi obbligatori sono contrassegnati *


Il periodo di verifica reCAPTCHA è scaduto. Ricaricare la pagina.

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