Если вы попытаетесь создать столбец TEXT в таблице и задать для него значение по умолчанию в MySQL, вы получите сообщение об ошибке (по крайней мере, в Windows). Я не вижу никакой причины, почему текстовый столбец не должен иметь значение по умолчанию. В документации MySQL нет объяснений. Это кажется мне нелогичным (и несколько разочаровывающим, поскольку я хочу значение по умолчанию!). Кто-нибудь знает, почему это не разрешено?
mysql
default-value
Russ
источник
источник
TEXT
- эти столбцы не могут иметь значения по умолчанию.VARCHAR
жестяная банка.Ответы:
Windows MySQL v5 выдает ошибку, но Linux и другие версии вызывают только предупреждение. Это должно быть исправлено. WTF?
Также посмотрите на попытку исправить это как ошибку # 19498 в MySQL Bugtracker:
Лично я считаю это ошибкой. Поиск по запросу «столбец BLOB / TEXT не может иметь значения по умолчанию» возвращает примерно 2 940 результатов в Google. Большинство из них являются сообщениями о несовместимости при попытке установить сценарии БД, которые работали в одной системе, но не в других.
Сейчас я сталкиваюсь с той же проблемой в веб-приложении, которое я изменяю для одного из моих клиентов, изначально развернутого в Linux MySQL v5.0.83-log. Я использую Windows MySQL v5.1.41. Даже пытаясь использовать последнюю версию phpMyAdmin для извлечения базы данных, она не сообщает о значении по умолчанию для рассматриваемого текстового столбца. Тем не менее, когда я пытаюсь запустить вставку в Windows (которая отлично работает при развертывании Linux), я получаю сообщение об ошибке по умолчанию в столбце ABC. Я пытаюсь воссоздать таблицу локально с очевидным значением по умолчанию (на основе выбора уникальных значений для этого столбца) и в итоге получаю очень полезный столбец BLOB / TEXT, который не может иметь значение по умолчанию .
Опять же, несоблюдение базовой совместимости на разных платформах недопустимо и является ошибкой.
Как отключить строгий режим в MySQL 5 (Windows):
Отредактируйте /my.ini и найдите строку
Замени это
Перезапустите службу MySQL (при условии, что это mysql5)
Если у вас есть права root / admin, вы можете выполнить
источник
Без глубокого знания движка mySQL я бы сказал, что это звучит как стратегия экономии памяти. Я предполагаю, что причина этого параграфа в документах :
Похоже, что предварительное заполнение этих типов столбцов приведет к снижению использования памяти и снижению производительности.
источник
Вы можете получить тот же эффект, что и значение по умолчанию, используя триггер
источник
В качестве основного вопроса:
до сих пор не ответил, я сделал быстрый поиск и нашел относительно новое дополнение от разработчика MySQL на MySQL Bugs :
Это не определенный ответ, но, по крайней мере, отправная точка для вопроса « почему» .
А пока я просто напишу код и сделаю столбец обнуляемым или явно назначу (по умолчанию
''
) значение для каждогоinsert
из кода приложения ...источник
«Поддержка DEFAULT в столбцах TEXT / BLOB» - это запрос функции в MySQL Bugtracker (Ошибка № 21532) .
Я вижу, что я не единственный, кто хотел бы поместить значение по умолчанию в столбец TEXT. Я думаю, что эта функция должна поддерживаться в более поздней версии MySQL.
Это не может быть исправлено в версии 5.0 MySQL, потому что очевидно, что это приведет к несовместимости и потере данных, если кто-то попытается перенести базу данных туда-обратно между (текущими) базами данных, которые не поддерживают эту функцию, и любыми базами данных, которые поддерживают эта особенность.
источник
Обычно я запускаю сайты в Linux, но я также занимаюсь разработкой на локальной машине с Windows. Я сталкивался с этой проблемой много раз и просто исправлял таблицы, когда сталкивался с проблемами. Я вчера установил приложение, чтобы выручить кого-то, и, конечно, снова столкнулся с проблемой. Итак, я решил, что пришло время выяснить, что происходит - и нашел эту ветку. Мне действительно не нравится идея изменения sql_mode сервера в более ранний режим (по умолчанию), поэтому я пришел к простому (как мне кажется) решению.
Это решение, конечно, потребует от разработчиков обернуть свои сценарии создания таблиц, чтобы компенсировать проблему MySQL, работающую в Windows. Вы увидите похожие понятия в файлах дампа. Одно большое предостережение заключается в том, что это может / вызовет проблемы, если используется разбиение.
Вот и все.
источник
Для Ubuntu 16.04:
Как отключить строгий режим в MySQL 5.7:
Редактировать файл /etc/mysql/mysql.conf.d/mysqld.cnf
Если нижняя строка существует в mysql.cnf
Затем замените его
В противном случае
Просто добавьте строку ниже в mysqld.cnf
Это решило проблему.
источник