Małe litery tabel w MySQL

Jak wiadomo, a jeśli nie to się właśnie dowiecie, Windows nie rozróżnia dużych i małych liter. Zapis obrazek.jpg , obrazek.JPG, czy ObraZek.JpG będzie dokładnie tym samym plikiem.

 

Inna sprawa ma się natomiast w systemach Unix. Dla Linuxa każdy z tych plików jest zupełnie inny. Dla jednych to plus dla innych minus, ale nie o tym.
Problem pojawił się podczas korzystania z XAMPPa (serwera Apache, PHP, i MySQL na Win) i tego Apache z MySQL na Linuxie (serwer).

 

CMS Concrete5 zapisuje swoje tabele jako camelCase:

  • atDateTimeSetting
  • atSelectOptionsSelecte
  • BlockTypePermissionBlockTypeAccessList
  • CollectionVersionBlocksOutputCache

itd. Eksportując dane z bazy do pliku SQL w XAMPPie otrzymałem taki zapis:

  • atdatetimesettings
  • atselectoptionsselected
  • blocktypepermissionblocktypeaccesslist
  • collectionversionblocksoutputcache

Straciłem duże litery.

 

O ile na Win jest ok, tyle po wrzuceniu na serwer Concrete5 przestał działać - otrzymałem błąd z bazą danych. Pierwsza moja myśl, że mam błędną konfigurację. Okazało się, że jest wszystko ok. Więc może uprawnienia do plików? Też nie. Dopiero potem zaglądając do PMA (phpMyAdmin) zauważyłem tą zależność.

 

Ok, to jak mam pracować na Windows'ie skoro takie rzeczy się dzieją?

 

Otóż wystarczy lekko zmodyfikować plik konfiguracyjny MySQL i będzie dobrze :)

 

Plik nazywa się my.ini i znajduje się w xampp\mysql\bin . Musimy dopisać w sekcji # The MySQL server dodatkowe ustawienie, które wymusi nam stosowanie takich nazw (wielkość liter) jakie my chcemy.


Ustawienie nazywa się lower_case_table_names i musi przyjąć wartość 2:

 

lower_case_table_names=2


Ostatecznie fragment mojego pliku konfiguracyjnego:


# The MySQL server
[mysqld]
port= 3306
socket = "D:/xampp/mysql/mysql.sock"
basedir = "D:/xampp/mysql"
tmpdir = "D:/xampp/tmp"
datadir = "D:/xampp/mysql/data"
pid_file = "mysql.pid"
# enable-named-pipe
key_buffer = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log_error = "mysql_error.log"
lower_case_table_names=2


Teraz wystarczy zrestartować serwer MySQL i można spokojnie wracać do programowania.