我对一些本地传递的mysql代码进行了JUnit测试,但在服务器上运行时失败了。 本地我使用的是Windows 7,服务器是Ubuntu 14.04。两者都运行MySql 5.6。
我有一个带有空值的char列,并尝试在其上放置一个非空约束。在本地,这应该失败,但在服务器上我只得到一个警告,但它通过,并将空值设置为空字符串。 (见图片) 我假设这是mysql服务器配置的一些区别? 我是MySql的新手,无法找到解决方法。
示例图像:向上是服务器,向下是本地:
答案 0 :(得分:1)
首先检查:
SELECT @@sql_mode;
你可能会得到:
STRICT_TRANS_TABLES/STRICT_ALL_TABLES
UP env : -------
DOWN env: STRICT_..._TABLES
区别在于错误与警告:
严格模式控制MySQL处理无效或缺失值的方式 数据更改语句,如INSERT或UPDATE。值可以是 因几个原因无效。例如,它可能包含错误的数据 列的类型,或者可能超出范围。缺少值 当要插入的新行不包含非NULL值时 在其定义中没有显式DEFAULT子句的列。 (为一个 NULL列,如果缺少值,则插入NULL。)
的 SqlFiddleDemo
强>
解决问题的正确方法是首先在更改架构之前将NULL
更新为空字符串。
CREATE TABLE test_table(primary_key INT AUTO_INCREMENT PRIMARY KEY,
short_char CHAR(100));
INSERT INTO test_table(short_char)
VALUES (NULL);
UPDATE test_table
SET short_char = ''
WHERE short_char IS NULL;
ALTER TABLE test_table modify short_char char(100) not null;
的 SqlFiddleDemo2
强>
我建议使用VARCHAR(100)
代替CHAR(100)
。