venerdì 10 novembre 2006

Problemi con passaggio database mySQL da Windows a Linux

Forse sono rimasto l'unico a non saperlo ma: "Linux è case sensitive!"

Se mai vi dovesse capitare di realizzare un progetto che usi come base dati mySQL forse questo post vi tornerà utile e vi farà risparmiare un pò di tempo. Lo scenario è quello di un progetto che preveda l'utilizzo di MySQL come base dati installato prima su un server Windows e successivamente spostato su un server Linux.

mySQL (più precisamente l'engine myISAM di mySQL) memorizza le tabelle del vostro database in una cartella (che prende il nome del database) salvando un set di file con il nome della tabella stessa. Se il server mySQL gira su Windows, questo provvederà autonomamente a salvare tutte queste informazioni in minuscolo, indipendentemente da ogni vostra scelta in merito.

Quando realizzate la vostra applicazione, ricordatevi di scrivere in minuscolo i nomi delle tabelle nelle vostre query SQL o queste non funzioneranno una volta trasferito il database sul Linux.

Mi spiego meglio: se nella vostra applicazione scrivete una query tipo SELECT * FROM MiaTabella; questa query girerà senza problemi fintanto che il vostro server MySQL gira sotto Windows. Se porvate però a fare un dump del database su Windows e a spostarlo su un nuovo server MySQL che gira su Linux la vostra query non funzionerà più restituendo come errore il fatto che la tabella MiaTabella non esiste.

Questo dipende dal fatto che Linux è case sensitive per cui per lui le tabelle MiaTabella e miatabella sono due cose differenti.

L'unica soluzione che sono riuscito a trovare al problema è stata quella di riscrivere tutte le query con i nomi delle tabelle in minuscolo.

Spero di essere di aiuto per qualcuno e di risparmiarvi le ore spese a sbattere la testa contro il monitor per trovare la causa del problema.

Nessun commento: