首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中将空字符串赋值给INT空字段

问在MySQL中将空字符串赋值给INT空字段
EN

Database Administration用户
提问于 2018-07-16 18:54:50
回答 3查看 13.7K关注 0票数 4

向我指出一个引用,如果将空字符串('')分配给INT NULL字段会发生什么。

它变成NULL还是0?

MySQL的所有版本(从5开始)都是这样吗?

EN

回答 3

Database Administration用户

回答已采纳

发布于 2018-07-16 19:09:55

这取决于您正在运行的sql_mode。如果模式不是strict,那么插入的值将与对该类型的强制相同,

代码语言:javascript
复制
SELECT CAST('' AS int);
+-----------------+
| CAST('' AS int) |
+-----------------+
|               0 |
+-----------------+
1 row in set, 1 warning (0.00 sec)

然而,正如你所看到的,这是精神错乱。

代码语言:javascript
复制
CREATE TABLE foo ( id int, a int, b int NOT NULL );

INSERT INTO foo VALUES
  (1,1,NULL),
  (2,NULL,''),
  (3,'',NULL),
  (4,NULL,NULL);

SELECT * FROM foo;
+------+------+---+
| id   | a    | b |
+------+------+---+
|    1 |    1 | 0 |
|    2 | NULL | 0 |
|    3 |    0 | 0 |
|    4 | NULL | 0 |
+------+------+---+
4 rows in set (0.00 sec)

所以我们可以告诉MySQL尽量少开玩笑,更像一个真正的数据库,比如PostgreSQL。

代码语言:javascript
复制
SET sql_mode='strict_all_tables';

然后,

代码语言:javascript
复制
TRUNCATE foo;

INSERT INTO foo VALUES
  (1,1,NULL),
  (2,NULL,''),
  (3,'',NULL),
  (3,NULL,NULL);

但这一次,

错误1048 (23000):列'b‘不能为空

有关更多信息,请参见

票数 5
EN

Database Administration用户

发布于 2020-05-07 09:28:42

除了先前的回答之外,如果您迁移或使用Amazon,它将获得默认值,并且只能使用以下值中的至少一个进行更改:

代码语言:javascript
复制
ALLOW_INVALID_DATES, ANSI, ANSI_QUOTES, DB2, 
ERROR_FOR_DIVISION_BY_ZERO, HIGH_NOT_PRECEDENCE, 
IGNORE_BAD_TABLE_OPTIONS, IGNORE_SPACE, MAXDB, MSSQL, MYSQL323, 
MYSQL40, NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO, 
NO_BACKSLASH_ESCAPES, NO_DIR_IN_CREATE, NO_ENGINE_SUBSTITUTION, 
NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, 
NO_UNSIGNED_SUBTRACTION, NO_ZERO_DATE, NO_ZERO_IN_DATE, 
ONLY_FULL_GROUP_BY, ORACLE, PAD_CHAR_TO_FULL_LENGTH, 
PIPES_AS_CONCAT, POSTGRESQL, REAL_AS_FLOAT, 
STRICT_ALL_TABLES, STRICT_TRANS_TABLES, TRADITIONAL

也无法插入空设置。

票数 1
EN

Database Administration用户

发布于 2021-08-17 09:36:35

通过使用函数NULLIF(_variable_,'')强制该值变为null,我解决了这一问题。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/212358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档