gpt4 book ai didi

MySql:向具有空值的列添加非空约束通过?

转载 作者:可可西里 更新时间:2023-11-01 08:40:09 25 4
gpt4 key购买 nike

我对一些 mysql 代码进行了 JUnit 测试,这些代码在本地通过但在服务器上运行时失败。我在本地使用的是 Windows 7,服务器是 Ubuntu 14.04。两者都运行 MySql 5.6。

我有一个带有空值的 char 列,并尝试在其上放置一个非空约束。在本地这失败了,但在服务器上我只收到警告但它通过并且 null 值设置为空字符串。 (见图片)我假设这是 mysql 服务器配置的一些差异?我是 MySql 的新手,找不到解决此问题的方法。

示例图片:向上是服务器,向下是本地:

Example image: up is server, down is local

最佳答案

首先检查:

SELECT @@sql_mode;

你可能得到:

STRICT_TRANS_TABLES/STRICT_ALL_TABLES


UP env : -------
DOWN env: STRICT_..._TABLES

区别在于错误与警告:

enter image description here

Modes :

Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.)

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)

关于MySql:向具有空值的列添加非空约束通过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34652123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com