MySQL case sensitiveness on Windows Platform

Posted by Maurizio Attanasi on April 26, 2012 · 2 mins read
Come si evince dal titolo, il problema è il seguente: Se creo un database o una tabella su un RDBMS MySQL installato su sistemi windows, i relativi nomi sono sempre minuscoli (lowercase). La ragione di tale comportamento sta nel fatto che il filesystem del sistema operativo di Microsoft è case insensitive, ovvero il nome di files e/o cartelle viene sempre considerato minuscolo. Di norma questo non è un problema, tranne che in queste due situazioni (almeno quelle di cui sono a conoscenza):
  • Voglio fare il deploy del mio database da un server Windows ad uno Linux. Poichè il filesystem quest'ultimo è case sensitive, tutte le queries, procedure e funzioni scritte per la piattaforma Microsoft, con buona probabilità smetteranno di funzionare sul nuovo server;
  • Voglio fare il porting del mio database verso un RDBMS case sensitive come, ad esempio, SQL Server. Stesso problema.
La causa del problema, sta nella configurazione iniziale di MySQL, ed in particolare nella chiave del file di configurazione lower_case_table_names che, per default ha valore 0 (zero, nomi di database e tabelle sono salvati su disco in modo case sensitive) su piattaforme Linux e valore 1 (in nomi di database e tabelle sono salvati sempre in minuscolo) su quelle Windows o Mac OSX. Esiste una terza alternativa che prevede il valore 2 per tale parametro, valore per il quale i nomi di database e tabelle vengono salvati su disco così come sono stati scritti nelle queries di creazione, ma nelle operazioni di confronto, MySQL li tratta tutti come se fossero scritti in minuscolo.  Una trattazione più scientifica è data dalla documentazione ufficiale di MySQL che può essere ragguinta da qui.
Come modificare il parametro in questione? Semplice.
  1. Modificare o aggiungere al file di configurazione di MySQL, my.ini, il valore lower_case_table_names = 2;
  2. Riavviare il servizio di MySQL;

Enjoy