2013-03-05 11 views
4


У меня есть таблицаMysql не ошибка при вставке или обновлении до нулевого значения на не нулевое поле

CREATE TABLE `devicelist` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `ip` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `serial` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
    `networkname` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `login` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `password` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `peopleid` int(10) unsigned NOT NULL, 
    `deviceid` int(10) unsigned NOT NULL, 
    `placeid` int(10) unsigned NOT NULL, 
    `stationid` int(10) unsigned NOT NULL, 
    `place` text COLLATE utf8_unicode_ci, 
    `date` date NOT NULL, 
    `active` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`), 
    KEY `placeid` (`placeid`), 
    KEY `stationid` (`stationid`), 
    KEY `peopleid` (`peopleid`), 
    KEY `deviceid` (`deviceid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

, как вы видите серийный установлен в NOT NULL,
но когда я запускаю запрос как

UPDATE DeviceList SET serial = NULL WHERE id = 1 

Он выводит

1 row affected. (Query took 0.0079 sec) 

Почему это вставка пустого нулевого поля?
Я хочу ошибка больше появляться: D

/// ****************************** EDIT

хорошо я нашел ответ
проблемы была в sql_mode
https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict
мой sql_mode был пуст по умолчанию
IW изменил его STRICT_ALL_TABLES через

SET GLOBAL sql_mode='STRICT_ALL_TABLES' 

ответ

0

Он должен и г Ошибка выброса. Я бы предположил, что create table, вы отправили в вопрос, не соответствует фактическому определению таблицы (учитывая, что у вас есть синтаксическая ошибка - дополнительная запятая).

+0

Хорошо, я обновился, чтобы завершить определение таблицы. Надеюсь, что это поможет найти проблему. – KoSMoS

+0

здесь же ... это порождает ошибку. –

+1

@KoSMoS: дважды проверьте, нет ли триггера 'before update', который может меняться« серийно »на лету. – a1ex07

0

MySQL из-за этого высасывал ад из-за этого, поэтому я просто делюсь тем, что узнал об этом.

MySQL 5.6 по умолчанию - NO_ENGINE_SUBSTITUTION.

MySQL 5.7 по умолчанию ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION. программы установки

Как указано в этом page из справочного руководства по MySQL,

MySQL может настроить режим SQL в процессе установки. Например, mysql_install_db создает файл с параметрами по умолчанию my.cnf в базовом каталоге установки.