Windows MySQL v5 zgłasza błąd, ale Linux i inne wersje zgłaszają tylko ostrzeżenie. To musi zostać naprawione. WTF?
Zobacz także próbę naprawienia tego błędu nr 19498 w MySQL Bugtracker:
Bryce Nesbitt 4 kwietnia 2008 16:36:
W MS Windows zasada "no DEFAULT" jest błędem, podczas gdy na innych platformach często jest ostrzeżeniem. Chociaż nie jest to błąd, możesz wpaść w pułapkę, jeśli napiszesz kod na łagodnej platformie, a później uruchomisz go na ścisłej platformie:
Osobiście uważam to za błąd. Wyszukiwanie „kolumna BLOB/TEXT nie może mieć wartości domyślnej” zwraca około 2940 wyników w Google. Większość z nich to zgłoszenia niezgodności podczas próby zainstalowania skryptów DB, które działały w jednym systemie, ale nie w innych.
Mam teraz ten sam problem w aplikacji internetowej, którą modyfikuję dla jednego z moich klientów, pierwotnie wdrożonej w systemie Linux MySQL v5.0.83-log. Używam Windows MySQL v5.1.41. Nawet próbując użyć najnowszej wersji phpMyAdmin do wyodrębnienia bazy danych, nie zgłasza wartości domyślnej dla danej kolumny tekstowej. Jednak, gdy próbuję uruchomić insert w systemie Windows (działa dobrze we wdrożeniu w Linuksie) otrzymuję błąd braku wartości domyślnej w kolumnie ABC. Próbuję odtworzyć tabelę lokalnie z oczywistymi wartościami domyślnymi (na podstawie wybranych unikalnych wartości dla tej kolumny) i w końcu otrzymuję bardzo użyteczną kolumna BLOB/TEXT nie może mieć wartości domyślnej .
Ponownie, nieutrzymywanie podstawowej kompatybilności na różnych platformach jest niedopuszczalne i jest błędem.
Jak wyłączyć tryb ścisły w MySQL 5 (Windows):
-
Edytuj /my.ini i poszukaj linii
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
-
Zastąp go
sql_mode='MYSQL40'
-
Zrestartuj usługę MySQL (zakładając, że jest to mysql5)
net stop mysql5 net start mysql5
Jeśli masz uprawnienia roota/administratora, możesz być w stanie wykonać
mysql_query("SET @@global.sql_mode='MYSQL40'");