Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо текстовата колона не може да има стойност по подразбиране в MySQL?

Windows MySQL v5 хвърля грешка, но Linux и други версии повдигат само предупреждение. Това трябва да се поправи. WTF?

Вижте също опит за коригиране на това като грешка #19498 в MySQL Bugtracker:

Bryce Nesbitt на 4 април 2008 г., 16:36:
В MS Windows правилото "без ПРАВО" е грешка, докато на други платформи често е предупреждение. Въпреки че не е грешка, е възможно да попаднете в капан от това, ако пишете код на снизходителна платформа и по-късно го стартирате на строга платформа:

Лично аз гледам на това като на грешка. Търсенето на „колона BLOB/TEXT не може да има стойност по подразбиране“ връща около 2940 резултата в Google. Повечето от тях са доклади за несъвместимост при опит за инсталиране на DB скриптове, които работят на една система, но не и на други.

Сблъсквам се със същия проблем сега в уеб приложение, което променям за един от моите клиенти, първоначално разположено на Linux MySQL v5.0.83-log. Работя с Windows MySQL v5.1.41. Дори да се опитвате да използвате най-новата версия на phpMyAdmin за извличане на базата данни, тя не отчита стойност по подразбиране за въпросната текстова колона. И все пак, когато се опитам да стартирам вмъкване в Windows (това работи добре при внедряването на Linux), получавам грешка без подразбиране в колоната ABC. Опитвам се да пресъздам таблицата локално с очевидното по подразбиране (въз основа на избор от уникални стойности за тази колона) и в крайна сметка получавам толкова полезната Колоната BLOB/TEXT не може да има стойност по подразбиране .

Отново, неподдържането на основна съвместимост между платформите е неприемливо и е грешка.

Как да деактивирате строг режим в MySQL 5 (Windows):

  • Редактирайте /my.ini и потърсете ред

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    
  • Заменете го с

    sql_mode='MYSQL40'
    
  • Рестартирайте услугата MySQL (ако приемем, че е mysql5)

    net stop mysql5
    net start mysql5
    

Ако имате root/admin достъп, може да успеете да изпълните

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. Как да съхранявам NULL стойности в полетата за дата и час в MySQL?

  2. PostgreSQL срещу MySQL

  3. Мога ли сляпо да заменя всички mysql_ функции с mysqli_?

  4. Предупреждение:mysql_fetch_array() очаква параметър 1 да бъде ресурс, булев, даден в

  5. JSON_ARRAY() – Създайте JSON масив от списък със стойности в MySQL