Baza danych MySQL na Linuksach jest wrażliwa na wielkość znaków w nazwach tabel. Czyli dwa takie zapytania:
1 2 3 | SELECT FROM tabela; SELECT FROM TABELA; |
Może się okazać, że wykonanie jednego z nich spowoduje wyrzucenie komunikatu, mówiącego że podana tabela nie istnieje.
Co można zrobić w takiej sytuacji:
- Zmodyfikować aplikację, tak aby odwoływała się do tabel tak, jak są nazywane w bazie danych.
Fajne, ale raz dużo pracy, dwa nie zawsze mamy kody źródłowe, trzy nie chcemy nikomu za to płacić. - Zmodyfikować konfigurację serwera bazy danych oraz bazę danych
Łatwiejsze niż modyfikacja kodu źródłowego, ale dotyczyć będzie wszystkich baz danych oraz aplikacji z niej korzystających.
Jak zmodyfikować konfigurację serwera aby nie było problemów z wielkością znaków w tabelach?
- Zmiana wielkości znaków w tabelach
Pierwszym krokiem jest zmiana wielkości znaków nazw tabel we wszystkich bazach danych na małe litery. Pomocny może być ten skrypt, produkujący odpowiednie zapytania, które należy następnie wykonać (autor Anders Eriksson):SELECT CONCAT('rename table ', TABLE_NAME, ' to ' , LOWER(TABLE_NAME) , ';')
FROM information_schema.`tables`
WHERE table_schema = 'nazwa_bazy_danych';Wynik zapytania należy wykonać na bazie danych, spowoduje to zmianę nazw tabel na pisane tylko małymi znakami.
Małe ostrzeżenie: Jeżeli w bazie danych istnieją dwie tak samo nazywające się tabele ale zapisane różną wielkością znaków, to MySQL zgłosi błąd podczas wykonywania powyższej operacji.
- Modyfikacja pliku konfiguracyjnego
/etc/mysql/my.cnf
Ostatnim krokiem jest odpowiednia konfiguracji bazy danych, tak aby zawsze już były używane małe litery do oznaczania tabel. Należy do pliku/etc/mysql/my.cnf
, w sekcjimysqld
dodać linię z parametremlower_case_table_names
31
32[mysqld]
lower_case_table_names=1
Od tej pory nie powinno już być problemów z różną wielkością znaków na nazwach tabel. Więcej informacji na temat tej opcji konfiguracyjnej można znaleźć na stronach MySQL.
Źródła
- Dokumentacja MySQL: Identifier Case Sensitivity
#1 by wxox on 2010/09/07 - 14:38
Dzieki, wczoraj przez wielkosc liter pol nocy poprawialem zaimportowana baze przez zdalny pulpit.
Dzieki lower_case_table_names=0 juz nie bede musial…