为什么MySQL将没有数据隐式转换为空字符串?
让我们创建表为什么MySQL将没有数据隐式转换为空字符串?
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版本14.14 DISTRIB 5.6.19,为Debian的Linux-GNU(x86_64的)
最有可能您的sql_mode不包含STRICT_TRANS_TABLES
这将允许执行的插入,你会得到一个警告,而不是一个错误..
您可以检查像这样
SHOW VARIABLES LIKE 'sql_mode';
您的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';
,如果你想这种变化会影响整个服务器,然后
-- change the sql_mode for the entire server.
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
如果你想改变它为整个服务器。然后,你还需要与
sql-mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
更新my.ini文件会阻止服务器恢复添加更新您的my.ini文件
查找以sql-mode =
开头的行并更换重新启动后重新启动。
sql_mode是NO_ENGINE_SUBSTITUTION。只有一个价值。这是默认的mysql配置 – 2014-11-25 00:27:59
好吧,像我上面提到的那样改变它,这会给你想要的结果。 – Jaylen 2014-11-25 00:29:02
它的工作原理。谢谢 – 2014-11-25 00:41:28
你的sql_mode设置为什么? 你可以发现,通过检查'show variables like'sql_mode''你的sql_mode可能被设置为空,这允许。但你会得到一个警告。 – Jaylen 2014-11-25 00:14:56
我系统中的sql_mode是NO_ENGINE_SUBSTITUTION。只发现一个变量。它的默认配置 - 我没有改变任何东西,因为我的系统上的安装 – 2014-11-25 00:25:44