sql >> Databáze >  >> RDS >> Mysql

Proč nemůže mít sloupec textu výchozí hodnotu v MySQL?

Windows MySQL v5 vyvolá chybu, ale Linux a další verze pouze zobrazí varování. To je potřeba opravit. WTF?

Podívejte se také na pokus to opravit jako chybu #19498 v MySQL Bugtracker:

Bryce Nesbitt, 4. dubna 2008 16:36:
Na MS Windows je pravidlo "no DEFAULT" chybou, zatímco na jiných platformách je to často varování. I když to není chyba, je možné se tím dostat do pasti, pokud napíšete kód na mírné platformě a později jej spustíte na striktní platformě:

Osobně to vnímám jako bug. Hledání „sloupec BLOB/TEXT nemůže mít výchozí hodnotu“ vrátí přibližně 2 940 výsledků na Googlu. Většina z nich jsou zprávy o nekompatibilitě při pokusu o instalaci DB skriptů, které fungovaly na jednom systému, ale ne na jiném.

Nyní narážím na stejný problém na webové aplikaci, kterou upravuji pro jednoho ze svých klientů, původně nasazené na Linux MySQL v5.0.83-log. Používám Windows MySQL v5.1.41. I když se pokusíte použít nejnovější verzi phpMyAdmin k extrahování databáze, nehlásí výchozí hodnotu pro příslušný textový sloupec. Přesto, když se pokusím spustit vložku ve Windows (která funguje dobře na nasazení Linuxu), zobrazí se mi chyba žádné výchozí nastavení ve sloupci ABC. Snažím se znovu vytvořit tabulku lokálně se zřejmým výchozím nastavením (na základě výběru jedinečných hodnot pro tento sloupec) a nakonec obdržím velmi užitečný Sloupec BLOB/TEXT nemůže mít výchozí hodnotu .

Opět platí, že neudržování základní kompatibility napříč platformami je nepřijatelné a je to chyba.

Jak zakázat přísný režim v MySQL 5 (Windows):

  • Upravte /my.ini a vyhledejte řádek

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  • Nahraďte jej za

    sql_mode='MYSQL40'
    
  • Restartujte službu MySQL (za předpokladu, že jde o mysql5)

    net stop mysql5
    net start mysql5
    

Pokud máte přístup root/admin, možná budete moci spustit

mysql_query("SET @@global.sql_mode='MYSQL40'");


  1. Chyba připojení Postgres byla uzavřena v aplikaci Spring Boot

  2. Jak náhodně nastavit text na tlačítka z SQLite bez opakování?

  3. Existuje v některých verzích Oracle limit vnoření pro korelované poddotazy?

  4. Proč mysqli vydává příkazy mimo synchronizaci?