Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego kolumna tekstowa nie może mieć wartości domyślnej w MySQL?

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'");


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zainstaluj MySQL na komputerze Mac

  2. Tworzenie aplikacji internetowej od podstaw przy użyciu Python Flask i MySQL:część 2

  3. W zapytaniach MySQL, po co używać join zamiast gdzie?

  4. Samouczek MySQL Workbench — kompleksowy przewodnik po narzędziu RDBMS

  5. Połączenie MySQL nie działa:2002 Brak takiego pliku lub katalogu