让我们创建表
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`data1` varchar(64) NOT NULL,
`data2` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
并粘贴一些数据
INSERT INTO `test` (`data1`) VALUES ('111');
我们没有指定data2
,但已插入行。字段data2
的值为空字符串。为什么插入没有失败?这是一个错误吗?
mysql Ver 14.14 Distrib 5.6.19,for debian-linux-gnu(x86_64)
答案 0 :(得分:2)
您的sql_mode很可能不包含STRICT_TRANS_TABLES
,这将允许执行插入,您将收到警告而不是错误。
你可以检查你的sql_mode变量
SHOW VARIABLES LIKE 'sql_mode';
如果您不想要这种行为,可以像这样更改您的sql_mode
-- change sql_mode only for the current session
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
如果您希望此更改影响整个服务器,那么</ p>
-- change the sql_mode for the entire server.
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
如果要为整个服务器更改它。然后你还需要添加更新你的my.ini文件
查找以sql-mode =
并将其替换为
sql-mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
更新my.ini文件将阻止服务器在重新启动后恢复。