Drie opties; minstens één te veel
Tabelnamen in MySQL zijn niet noodzakelijk case insensitive. Zo komt de tabel POSTS
niet per se overeen met de tabel posts
. Op Windows wel. En op OS X ook. Maar op Unix niet. Tenzij je de lower_case_table_names
variabele aanpast. Deze heeft 3 mogelijke opties: 0 (default op Unix), 1 (default op Windows), 2 (default op OS X).
Wacht, is dat nu geen overkill? Ofwel zijn de namen case sensitive, ofwel niet. Toch?
Ha, maar er is een ander gevolg van de gekozen optie: hoe wordt de tabelnaam opgeslagen. Lowercase? Zoals je hebt gespecifieerd bij het aanmaken van de tabel?
De 3 opties:
- 0 (Unix): naam opslaan zoals gespecifieerd, case sensitive vergelijking
- 1 (Windows): naam opslaan in lowercase, case insensitive vergelijking
- 2 (OS X): naam opslaan zoals gespecifieerd, case insensitive vergelijking
Kom dat zien. Even ervan uitgaan dat je een default installatie hebt op de 3 bovenstaande besturingssystemen en dat je volgende tabel maakt:
CREATE TABLE BLA(id int);
Dan zal deze query werken op Windows en OS X, maar niet op Unix:
SELECT * FROM bla;
Yup, this sucker bit me in the ass today.
Dit artikel werd opgenomen in ontwikkeling.