gpt4 book ai didi

mysql sqlmode 是非 strict_mode。但它检查不为空。并返回错误

转载 作者:行者123 更新时间:2023-11-29 06:49:24 33 4
gpt4 key购买 nike

我已更改 my.cnf。并检查sql_mode使用下面的命令

select @@global.sql_mode;

它说,

screenShot

我也尝试过

set global sql_mode='';
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';

但是...当我查询将空值插入非空列时,它返回错误...

如何关闭严格模式?????????

请帮帮我......

最佳答案

您不能将非空列设置为空。关闭sql模式的效果描述https://dev.mysql.com/doc/refman/5.7/en/constraint-invalid-data.html ,如果您没有使用严格模式,那么每当您将“不正确”的值插入列中时,例如将 NULL 插入 NOT NULL 列或将太大的数值插入数字列中,MySQL 会将该列设置为“最佳可能值”而不是产生错误 ... 如果尝试将 NULL 存储到不采用 NULL 值的列中,则单行 INSERT 语句会发生错误。对于多行 INSERT 语句或 INSERT INTO ... SELECT 语句,MySQL Server 存储列数据类型的隐式默认值。一般来说,数字类型为 0,字符串类型为空字符串 (''),日期和时间类型为“零”值

这很容易证明:-

MariaDB [sandbox]> SET SESSION SQL_MODE = '';
Query OK, 0 rows affected (0.00 sec)

MariaDB [sandbox]> SELECT @@sESSION.SQL_MODE;
+--------------------+
| @@sESSION.SQL_MODE |
+--------------------+
| |
+--------------------+
1 row in set (0.00 sec)

MariaDB [sandbox]> select * from t;
+----+------------+---------+
| id | dt | meeting |
+----+------------+---------+
| 1 | 2017-12-20 | 1 |
| 2 | 2017-12-20 | 1 |
| 3 | 2017-12-20 | 1 |
| 4 | 2017-12-22 | 1 |
| 5 | 2017-12-25 | 1 |
+----+------------+---------+
5 rows in set (0.00 sec)

MariaDB [sandbox]> INSERT INTO T (DT,MEETING) VALUES ('2018-01-01',NULL);
ERROR 1048 (23000): Column 'meeting' cannot be null
MariaDB [sandbox]>
MariaDB [sandbox]>
MariaDB [sandbox]> INSERT INTO T (DT,MEETING) VALUES ('2018-01-01',NULL),('2018-01-02',NULL);
Query OK, 2 rows affected, 2 warnings (0.41 sec)
Records: 2 Duplicates: 0 Warnings: 2

MariaDB [sandbox]>
MariaDB [sandbox]> SELECT * FROM T;
+----+------------+---------+
| id | dt | meeting |
+----+------------+---------+
| 1 | 2017-12-20 | 1 |
| 2 | 2017-12-20 | 1 |
| 3 | 2017-12-20 | 1 |
| 4 | 2017-12-22 | 1 |
| 5 | 2017-12-25 | 1 |
| 13 | 2018-01-01 | 0 |
| 14 | 2018-01-02 | 0 |
+----+------------+---------+
7 rows in set (0.00 sec)

对于单个插入,忽略扩展

MariaDB [sandbox]> INSERT ignore INTO T (DT,MEETING) VALUES ('2018-01-10',NULL);
Query OK, 1 row affected, 1 warning (0.02 sec)

MariaDB [sandbox]> select * from t;
+----+------------+---------+
| id | dt | meeting |
+----+------------+---------+
| 1 | 2017-12-20 | 1 |
| 2 | 2017-12-20 | 1 |
| 3 | 2017-12-20 | 1 |
| 4 | 2017-12-22 | 1 |
| 5 | 2017-12-25 | 1 |
| 13 | 2018-01-01 | 0 |
| 14 | 2018-01-02 | 0 |
| 15 | 2018-01-10 | 0 |
+----+------------+---------+
8 rows in set (0.00 sec)

允许插入但存储如上所述的隐式值。(这也适用于多行插入并且不关心严格模式)

警告关闭 sql 模式和使用插入忽略是非常生硬的工具 - 并且可能对您的数据库有害。

关于mysql sqlmode 是非 strict_mode。但它检查不为空。并返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48090747/

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