MySQL – Nomi tabelle case sensitive

Applicazione pratica di un restore da Linux a Win32

Dalla documentazione ufficiale di MySQL risulta che un dump effettuato da machine Linux o “Unix like” risulta poter esportare i nomi di tabelle in modo case sensitive, cioè occupandosi delle differenze dei nomi di tabelle effettuando delle distinzioni tra le maiuscole e minuscole.
Sebbene quando venga eseguido il dump di backup questo vada a buon fine ed in esso siano correttamente riportate in modo esatto le varie differenze tra nomi maiuscoli e minuscoli riguardanti i nomi assegnati alle tabelle; se si prova ad effettuare un ripristino del dump di cui sopra su un sistema operativo win32, ci si accorgerà che la denominazione delle tabelle verrà modificata tutto in minuscolo!!

Con mio sommo stupore ho provato quindi ad effettuare il seguente esperimento inserendo alcune prove al fine di test direttamente all’interno di un monitor (consolle) collegato al sistema win32 di cui ho appena effettuato il restore di un dump eseguito da una macchina Linux (Gentoo) che conteneva tabelle con nomi sia maiuscoli che minuscoli.

Le query da me eseguite sono le seguenti:

SELECT nome_campo1, nome_campo2, nome_campo3 … FROM NOME_TABELLA ORDER BY nome_campo2;

SELECT nome_campo1, nome_campo2, nome_campo3 … FROM nome_tabella ORDER BY nome_campo2;

In entrambi i casi le query vengono correttamente processate e producono (ovviamente) i medesimi risultati.
Non vi è quindi nessun problema dal punto di vista sintattico e credo che non ve ne sia nemmeno nel caso in cui ad eseguirla sia un linguaggio esterno, tipo PHP o interrogazione con ODBC o via DataProvider o altro ancora, anche se questo a priori non può essere escluso ed andrebbe testato in modo mirato!
Si potrebbe andare incontro a qualche problema di incompatibilità; soprattutto se poi il successivo dump generato dalla macchina win32 (con il restore appena applicato) venga successivamente ripristinato su di una nuova macchina Linux o Unix like.

Tutto ciò è dovuto al fatto che il sistema operativo (OS d’ora in avanti) Linux è case sensitive, mentre non si può altrettanto dire per il OS di casa Microsoft.
La soluzione, proposta dalla documentazione e dal forum ufficiale di MySQL (ammesso che io abbia ben interpretato), dovrebbe essere quella di impostare tutti i nomi delle tabelle in minuscolo; cito letteralmente la frase originaria:

However, this same statement is permitted on Windows. To avoid problems caused by such differences, it is best to adopt a consistent convention, such as always creating and referring to databases and tables using lowercase names. This convention is recommended for maximum portability and ease of use.

L’articolo originale lo potete trovare qui:
http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

Siccome il caso sopra descritto mi è parso quanto mai interessante, sarebbe comunque buona norma d’ora in poi, assegnare dei nomi minuscoli a tutti i nostri database e alle nostre tabelle che andremo via, via a costruire.
In questo modo si potranno facilmente evitare possibili casi di incompatibilità dovuti all’utilizzo di OS diversi.

Posted in Documentazione Tecnica, MySQL Avanzato.