2017-02-16 5 views
0

структуры таблицы:Вставки на MariaDB терпит неудачу, когда ommitting не по умолчанию полого

CREATE TABLE `setup_int` (
    `key` VARCHAR(50) NOT NULL, 
    `val` INT(11) NOT NULL, 
    PRIMARY KEY (`key`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB 

Как вы можете увидеть поля NOT NULL -полей и не имеют значения по умолчанию.

Обновлено до MariaDB 10.1.21 и имеет следующую проблему: Следующий запрос завершается с ошибкой без сообщения об ошибке!

INSERT INTO `setup_int` (`key`) VALUES ('test'); 

Причина, по-видимому, в отсутствии значения по умолчанию.

  • Если я добавлю значение по умолчанию в таблицу, вставка будет успешной.
  • Если я изменю NOT NULL на NULL, вставка будет успешной.
  • ЕСЛИ Я делаю это на MariaDB 10.1.20, вставка выполнена успешно.
  • Если я делаю вставку с обоими полями, вставка успешно выполнена.

Это работает:

INSERT INTO `setup_int` (`key`,`val`) VALUES ('test',0); 

Вопрос: Что я могу сделать (некоторые настройки, или что-то еще), чтобы сделать MariaDB 10.1.21, чтобы справиться с этой ситуацией, как и раньше. Сейчас я не могу изменить все таблицы, и сейчас я не могу отказаться.

Основная проблема заключается в том, что запрос, выполняемый PHP, возвращает true, хотя вставка не удалась!

+1

Я не вижу, что проблема здесь. Если вы настроите таблицу и скажите, что 'val' не может быть NULL, тогда вы должны указать значение для val в каждой вставке. Поэтому, если вы не можете предоставить это значение, удалите 'NOT NULL' или добавьте DEFAULT – RiggsFolly

+0

@RiggsFolly. Я согласен, это поведение кажется нормальным и ожидаемым. –

+0

Если вы оставите 'val' пустым, работали в 10.1.20, то, вероятно, была ошибка в 10.1.20, поэтому возврат будет означать, что вы когда-либо сможете обновить базу данных – RiggsFolly

ответ

1

Посмотрите здесь: https://stackoverflow.com/a/2503938/1973205

И тогда вы можете установить переменные, как это: https://mariadb.com/kb/en/mariadb/sql-mode/

Как чисто логический самом деле, это правильно, что запрос не будет.

+0

Спасибо за это. Но я думаю, что для данного поведения нет значения Mode-Value. Как я думаю, вы написали ближайший ответ на мой вопрос, я приму это. Кажется, что я должен обновить все свои структуры таблицы прямо сейчас. Спасибо, в любом случае. – steven

0

В основном вы устанавливаете ограничение на то, что значение val не должно быть NULL, и оно терпит неудачу, потому что вы пытаетесь установить его NULL.

(0 не то же самое, как NULL.)

Значение по умолчанию устанавливается во время CREATE:

CREATE TABLE `setup_int` (
    `key` VARCHAR(50) NOT NULL, 
    `val` INT(11) NOT NULL DEFAULT 0, 
    PRIMARY KEY (`key`) 
) 
+1

Я думаю, что он это знает, _Посмотрите на первую пулю point_ – RiggsFolly

+1

Да, я знаю это. Но это был не вопрос. Вопрос был: что еще я могу сделать, чтобы он работал, но меняя структуру моих таблиц. – steven