MySQL - MySQLi и история загадочной ошибки - PullRequest
2 голосов
/ 19 октября 2010

У меня есть система, которая работает на сотнях веб-сайтов, и я впервые получаю сообщение об ошибке.Я надеялся, что кто-то может сказать мне, что может вызвать эту ошибку, поэтому я могу попытаться устранить ее.

Проблема возникает при попытке добавить страницу.

INSERT INTO pages (parent, name, type, sort) VALUES ('0', 'test', 'text', '37.5');

Это выплевываетследующая ошибка.

[nativecode=1364 ** Field 'text' doesn't have a default value]

Я думал, что это может быть основано на коде, поэтому я загрузил phpMyAdmin и ошибка все еще сохраняется.Это не имеет значения по умолчанию, однако оно никогда не было нужно.До сих пор она работала нормально.

Когда я пытаюсь установить поле по умолчанию на этом сервере, я получаю следующую ошибку.

#1101 - BLOB/TEXT column 'text' can't have a default value 

По сути, вопрос - чтопроисходит?

Отличается ли MySQLi от MySQL?Может ли это быть причиной.

Мой сервер работает под управлением mysql 5.0.5, этот сервер работает под управлением mysql 5.0.51a.Могу ли я с уверенностью предположить, что это не причина?

У кого-нибудь есть какие-либо идеи или даже предположения относительно того, где может быть причина этого?

Ответы [ 4 ]

1 голос
/ 26 июля 2012

Я понимаю, что это старый вопрос, но у меня была похожая проблема, и я нашел этот вопрос через Google без ответа, так что в случае, если кто-то еще делает, вот мое решение:

В моем случае я пытался запустить корзину покупок на своем локальном компьютере и продолжал получать ошибки базы данных, подобные той, которая упоминалась в вопросе. Я использовал MySQL 5.5.12 и оказалось, что php в выбранной мной корзине покупок был написан для более старой версии MySQL , и это продолжало отмечать ошибки и несовместимости. Я не собираюсь предлагать, если у вас есть аналогичная проблема для понижения, к счастью, это не нужно!

Здесь необходимо отключить строгий режим MySQL , что вызывает проблемы с совместимостью. Для этого все, что вам нужно сделать, это запустить следующий запрос через phpMyAdmin / SQLyog (или выбранный интерфейс):

SET @@global.sql_mode='';

Просто чтобы уточнить, что это две одинарные кавычки (').

Обратитесь к этому сайту за дополнительной информацией или другими способами отключения строгого режима MySQL: http://nickbartlett.com/wordpress/how-to-turn-off-mysql-strict-mode/

0 голосов
/ 23 октября 2013

Столкнулся с этой же проблемой при отладке устаревшего приложения и смог ее решить, зайдя в мой конфигурационный файл MySQL (my.cnf на моем mac, но, вероятно, my.ini в Windows, если вы так работаете) и комментируя строка sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES внизу файла. Перезапустите mysql, как только это будет сделано, чтобы изменения вступили в силу.

0 голосов
/ 19 октября 2010

Если поле text находится в таблице, в которую вы вставляете, и оно не может быть ПУСТО (NULL), вам нужно установить его значение. Если вы этого не сделаете, для него будет установлено значение по умолчанию, а значения по умолчанию, как видите, нет. Попробуйте использовать обратные кавычки для экранирования зарезервированного слова и вставьте значение для него следующим образом:

INSERT INTO pages (parent, name, type, sort, `text`) VALUES ('0', 'test', 'text', '37.5', '');
0 голосов
/ 19 октября 2010

Если ваше поле с именем 'text' не имеет значения nullable, вы должны будете вставить в него значение, если также нет значения по умолчанию.Я не знаю, почему существует разница в поведении между двумя версиями.MySQLi - это просто версия драйвера MySQL, которая работает в более поздних версиях MySQL (я думаю, что> = 4.1, но точно не помню).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...