sql >> Database >  >> RDS >> Mysql

Waarom kan een tekstkolom geen standaardwaarde hebben in MySQL?

Windows MySQL v5 geeft een foutmelding, maar Linux en andere versies geven alleen een waarschuwing. Dit moet worden opgelost. WTF?

Zie ook een poging om dit op te lossen als bug #19498 in de MySQL Bugtracker:

Bryce Nesbitt op 4 april 2008 16:36:
Op MS Windows is de "no DEFAULT"-regel een fout, terwijl dit op andere platforms vaak een waarschuwing is. Hoewel het geen bug is, is het mogelijk om hierdoor in de val te lopen als je code schrijft op een soepel platform en het later op een strikt platform uitvoert:

Persoonlijk zie ik dit als een bug. Zoeken naar 'BLOB/TEXT-kolom kan geen standaardwaarde hebben' levert ongeveer 2.940 resultaten op Google op. De meeste zijn meldingen van incompatibiliteit bij het installeren van DB-scripts die op het ene systeem wel werkten, maar niet op het andere.

Ik loop nu tegen hetzelfde probleem aan op een webapp die ik aan het wijzigen ben voor een van mijn clients, oorspronkelijk geïmplementeerd op Linux MySQL v5.0.83-log. Ik gebruik Windows MySQL v5.1.41. Zelfs als je de nieuwste versie van phpMyAdmin probeert te gebruiken om de database te extraheren, wordt er geen standaard voor de betreffende tekstkolom gerapporteerd. Maar als ik probeer een insert op Windows uit te voeren (dat werkt prima op de Linux-implementatie), ontvang ik een foutmelding van geen standaard in de ABC-kolom. Ik probeer de tabel lokaal opnieuw te maken met de voor de hand liggende standaard (gebaseerd op een selectie van unieke waarden voor die kolom) en ontvang uiteindelijk de oh-zo-handige BLOB/TEXT-kolom kan geen standaardwaarde hebben .

Nogmaals, het niet handhaven van de basiscompatibiliteit tussen platforms is onaanvaardbaar en is een bug.

Hoe de strikte modus in MySQL 5 (Windows) uit te schakelen:

  • Bewerk /my.ini en zoek naar regel

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  • Vervang het door

    sql_mode='MYSQL40'
    
  • Start de MySQL-service opnieuw (ervan uitgaande dat het mysql5 is)

    net stop mysql5
    net start mysql5
    

Als je root/admin-toegang hebt, kun je misschien

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


  1. Paging met Oracle

  2. PostgreSQL, slepen en wisselen

  3. Verzamelmethode:COUNT-functie in Oracle Database

  4. Overwegingen rond kolomvolgorde in indexen en sorteringen