Mysql嚴(yán)格模式,顧名思義,是一種比較嚴(yán)格的模式,它呢使用來限制在處理數(shù)據(jù)的時候,更新數(shù)據(jù)插入數(shù)據(jù)的時候,對數(shù)據(jù)更嚴(yán)格的進(jìn)行對比和檢查,保證數(shù)據(jù)的準(zhǔn)確性和完整性。在這個模式下可以有效的防止非法或者不正確的數(shù)據(jù)寫入到數(shù)據(jù)庫中,從而有效提高數(shù)據(jù)的可靠性。
嚴(yán)格模式主要分為以下幾種:
?STRICT_TRANS_TABLES?:在這種模式下,MySQL會對所有支持事務(wù)的存儲引擎(如InnoDB)執(zhí)行嚴(yán)格的檢查。
?STRICT_ALL_TABLES?:這種模式下,MySQL會對所有存儲引擎執(zhí)行嚴(yán)格的檢查,無論它們是否支持事務(wù)。
?NO_ZERO_DATE?、?NO_ZERO_IN_DATE?、?ERROR_FOR_DIVISION_BY_ZERO?等:這些是嚴(yán)格模式下的具體選項(xiàng),用于控制特定類型的數(shù)據(jù)錯誤處理?。
NO_ZERO_DATE:禁止插入零日期('0000-00-00')。
NO_ZERO_IN_DATE:禁止插入零日期或零時間('0000-00-00 00:00:00')。
ERROR_FOR_DIVISION_BY_ZERO:禁止除以零操作,并返回錯誤信息。
那么我們?nèi)绾侮P(guān)閉嚴(yán)格模式呢?
1、可以通過命令行命令來臨時修改
登錄MySQL服務(wù)器:
使用命令行客戶端或圖形界面客戶端登錄到MySQL服務(wù)器。在命令行中,可以使用mysql -u 用戶名 -p命令登錄,然后輸入MySQL用戶密碼。
查看當(dāng)前的SQL模式設(shè)置:
執(zhí)行SHOW VARIABLES LIKE 'sql_mode';命令來查看當(dāng)前的sql_mode設(shè)置,其中可能包含STRICT_TRANS_TABLES(表示啟用嚴(yán)格模式)。
修改SQL模式:
執(zhí)行SET GLOBAL sql_mode='';命令來臨時關(guān)閉嚴(yán)格模式(對當(dāng)前MySQL服務(wù)器實(shí)例的所有新會話生效,但重啟MySQL后會失效)。
如果只想對當(dāng)前會話生效,可以使用SET SESSION sql_mode='';命令。
2、通過修改配置文件永久修改
找到MySQL配置文件:
在Linux系統(tǒng)中,通常是/etc/my.cnf或/etc/mysql/my.cnf。
在Windows系統(tǒng)中,通常是my.ini。
編輯配置文件:
打開配置文件,找到[mysqld]部分。
在其中添加或修改sql_mode參數(shù),移除STRICT_TRANS_TABLES或其他嚴(yán)格模式相關(guān)的設(shè)置。例如:
ini
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION" # 示例,根據(jù)需要設(shè)置其他模式
或者,如果希望完全關(guān)閉所有模式(通常不推薦,因?yàn)榭赡軙档蛿?shù)據(jù)完整性和準(zhǔn)確性),可以設(shè)置為空字符串:
ini
[mysqld]
sql_mode=""
重啟MySQL服務(wù):
保存配置文件更改后,需要重啟MySQL服務(wù)以使更改生效。可以使用服務(wù)管理工具(如systemctl、service命令)或命令行工具(如mysqladmin shutdown后mysqld_safe &)來重啟MySQL服務(wù)。
驗(yàn)證更改:
重新登錄到MySQL服務(wù)器,并再次執(zhí)行SHOW VARIABLES LIKE 'sql_mode';命令來驗(yàn)證sql_mode設(shè)置是否已更新,從而確認(rèn)嚴(yán)格模式已被關(guān)閉。