sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor kan en tekstkolonne ikke have en standardværdi i MySQL?

Windows MySQL v5 kaster en fejl, men Linux og andre versioner giver kun en advarsel. Dette skal rettes. WTF?

Se også et forsøg på at rette dette som fejl #19498 i MySQL Bugtracker:

Bryce Nesbitt den 4. april 2008 kl. 16:36:
På MS Windows er reglen "ingen DEFAULT" en fejl, mens den på andre platforme ofte er en advarsel. Selvom det ikke er en fejl, er det muligt at blive fanget af dette, hvis du skriver kode på en skånsom platform og senere kører den på en streng platform:

Personligt ser jeg dette som en fejl. Søgning efter "BLOB/TEXT-kolonnen kan ikke have en standardværdi" returnerer omkring 2.940 resultater på Google. De fleste af dem er rapporter om inkompatibilitet ved forsøg på at installere DB-scripts, der fungerede på ét system, men ikke på andre.

Jeg støder på det samme problem nu på en webapp, jeg er ved at ændre for en af ​​mine klienter, oprindeligt installeret på Linux MySQL v5.0.83-log. Jeg kører Windows MySQL v5.1.41. Selv hvis du prøver at bruge den seneste version af phpMyAdmin til at udtrække databasen, rapporterer den ikke en standard for den pågældende tekstkolonne. Men når jeg prøver at køre en indsættelse på Windows (der fungerer fint på Linux-implementeringen), får jeg en fejlmeddelelse om ingen standard på ABC-kolonnen. Jeg forsøger at genskabe tabellen lokalt med den åbenlyse standard (baseret på et udvalg af unikke værdier for den kolonne) og ender med at modtage den åh-så-nyttige BLOB/TEXT-kolonnen kan ikke have en standardværdi .

Igen, ikke at opretholde grundlæggende kompatibilitet på tværs af platforme er uacceptabelt og er en fejl.

Sådan deaktiverer du streng tilstand i MySQL 5 (Windows):

  • Rediger /my.ini og se efter linje

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  • Erstat den med

    sql_mode='MYSQL40'
    
  • Genstart MySQL-tjenesten (forudsat at det er mysql5)

    net stop mysql5
    net start mysql5
    

Hvis du har root/admin-adgang, kan du muligvis udføre

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


  1. Python:bruge mysqldb til at importere en MySQL-tabel som en ordbog?

  2. Sådan løses ORA-29913 med eksterne tabeller

  3. PCI Compliance for MySQL &MariaDB med ClusterControl

  4. Hvordan får jeg adgang til MySQL-kommandolinjen med XAMPP til Windows?