Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 默认值不为';不能在集合数据中工作_Mysql_Sql - Fatal编程技术网

Mysql 默认值不为';不能在集合数据中工作

Mysql 默认值不为';不能在集合数据中工作,mysql,sql,Mysql,Sql,请帮帮我 CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig'); 插入: INSERT INTO RET VALUES('root') //empty string! Why? DEFAULT doesn't work! 谢谢。它正常工作。 例如,像这样更改您的模式 CREATE TABLE RET (id int, anim SET('dog','pig','voon') DEFAULT 'pig'); 然后在插入中

请帮帮我

CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig');
插入:

INSERT INTO RET VALUES('root')  //empty string! Why? DEFAULT doesn't work!
谢谢。

它正常工作。 例如,像这样更改您的模式

CREATE TABLE RET (id int, anim SET('dog','pig','voon') DEFAULT 'pig');
然后在插入中省略
anim

INSERT INTO ret (id) VALUES(1);
或者使用
默认值
关键字

INSERT INTO ret (id, anim) VALUES(2, DEFAULT);
输出:

| ID | ANIM | ------------- | 1 | pig | | 2 | pig | |ID | ANIM| ------------- |1 |清管器| |2 |清管器| 下面是演示

,它可以正常工作。 例如,像这样更改您的模式

CREATE TABLE RET (id int, anim SET('dog','pig','voon') DEFAULT 'pig');
然后在插入中省略
anim

INSERT INTO ret (id) VALUES(1);
或者使用
默认值
关键字

INSERT INTO ret (id, anim) VALUES(2, DEFAULT);
输出:

| ID | ANIM | ------------- | 1 | pig | | 2 | pig | |ID | ANIM| ------------- |1 |清管器| |2 |清管器|
这里是演示

默认值
不会替换无效值,它只定义了插入中未指定值时要使用的默认值。

默认值
不会替换无效值,它只定义了插入中未指定值时要使用的默认值。

+1到@peterm的答案,但FWIW这里有两种其他方法可以说明这种行为:

INSERT INTO ret (anim) VALUES (DEFAULT);
INSERT INTO ret () VALUES ();
插入值“root”会导致空字符串而不是默认值的原因是,指定值时默认值不会生效

值“root”不是集合定义中的有效项之一,但在默认行为下,MySQL会“截断”无效值,并插入一个空集合。它会在截断无效值时生成警告,但不会阻止插入

您可以设置严格模式以禁用自动截断。这会将警告变成错误,插入将失败

mysql> SET SQL_MODE=STRICT_ALL_TABLES;
mysql> INSERT INTO RET VALUES('root');
ERROR 1265 (01000): Data truncated for column 'anim' at row 1

+1到@peterm的答案,但FWIW这里有两种其他方法可以说明这种行为:

INSERT INTO ret (anim) VALUES (DEFAULT);
INSERT INTO ret () VALUES ();
插入值“root”会导致空字符串而不是默认值的原因是,指定值时默认值不会生效

值“root”不是集合定义中的有效项之一,但在默认行为下,MySQL会“截断”无效值,并插入一个空集合。它会在截断无效值时生成警告,但不会阻止插入

您可以设置严格模式以禁用自动截断。这会将警告变成错误,插入将失败

mysql> SET SQL_MODE=STRICT_ALL_TABLES;
mysql> INSERT INTO RET VALUES('root');
ERROR 1265 (01000): Data truncated for column 'anim' at row 1

完美答案。谢谢。如果在插入中指定为空,该怎么办?空值是否替换为默认值?@Jorrit
NULL
是一个值,因此将使用它代替默认值。这里拉小提琴:完美答案。谢谢。如果在插入中指定为空,该怎么办?空值是否替换为默认值?@Jorrit
NULL
是一个值,因此将使用它代替默认值。注意:好的评论:“MySQL”截断“无效值”,并插入一个空集。“.Tanks需要您的帮助。好的评论:“MySQL”截断“无效值”,并插入一个空集。“.Tanks需要您的帮助。