mysql查询数据库报错sql_mode_MySQL数据库的sql_mode
內容綱要
錯誤詳情
插入或導入數據庫時,如果時間字段的格式為 ‘0’ ,插入時報錯:
ERROR 1292 (22007): Incorrect datetime value: '0' for column 'xxx' at row 1
使用GROUP BY語句報錯
MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause
原因
以上錯誤都是由于sql_mode設置了嚴格模式,所以插入失敗。
sql_mode簡而言之就是:它定義了你MySQL應該支持的sql語法,對數據的校驗等等。
在生產環境中強烈建議將這個值設置為嚴格模式,這樣有些問題可以在數據庫的設計和開發階段就能實現,而如果在生產環境下運行數據庫后發現這類問題,那么修改的代價將變得十分巨大。此外正確地設置sql_mode還可以做一些約束(constraint)檢查的工作。
5.6和5.7的默認設置
# MySQL 5.6 Default SQL_MODE;
mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)
# MySQL 5.7 Default SQL_MODE;
mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
sql_mode設置
命令行&SQL
set sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
my.cnf
# 在my.cnf添加如下配置
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode常用值
ONLY_FULL_GROUP_BY
對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那么這個SQL是不合法的,因為列不在GROUP BY從句中。
在嚴格模式下,不要讓GROUP BY部分中的查詢指向未選擇的列,否則報錯。
NO_AUTO_VALUE_ON_ZERO
該值影響自增長列的插入。默認設置下,插入0或NULL代表生成下一個自增長值。如果用戶 希望插入的值為0,而該列又是自增長的,那么這個選項就有用了。
STRICT_TRANS_TABLES
在該模式下,如果一個值不能插入到一個事務表中,則中斷當前的操作,對非事務表不做限制
NO_ZERO_IN_DATE
在嚴格模式下,不允許日期和月份為’0′
NO_ZERO_DATE
設置該值,mysql數據庫不允許插入’0000-00-00 00:00:00’,插入零日期會拋出錯誤而不是警告
ERROR_FOR_DIVISION_BY_ZERO
在INSERT或UPDATE過程中,如果數據被零除,則產生錯誤而非警告。如 果未給出該模式,那么數據被零除時MySQL返回NULL
NO_AUTO_CREATE_USER
禁止GRANT創建密碼為空的用戶
NO_ENGINE_SUBSTITUTION
如果需要的存儲引擎被禁用或未編譯,那么拋出錯誤。不設置此值時,用默認的存儲引擎替代,并拋出一個異常
PIPES_AS_CONCAT
將"||"視為字符串的連接操作符而非或運算符,這和Oracle數據庫是一樣的,也和字符串的拼接函數Concat相類似
ANSI_QUOTES
啟用ANSI_QUOTES后,不能用雙引號來引用字符串,因為它被解釋為識別符
總結
以上是生活随笔為你收集整理的mysql查询数据库报错sql_mode_MySQL数据库的sql_mode的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux操作系统下双网卡路由表配置
- 下一篇: CentOS系统双网卡路由设置