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.