在 Ubuntu 系統中修改 MySQL 的?sql_mode
?需要編輯 MySQL 的配置文件并重啟服務。以下是詳細步驟:
步驟 1:定位 MySQL 配置文件
MySQL 配置文件通常位于以下路徑之一(具體取決于安裝方式):
-
/etc/mysql/my.cnf
-
/etc/mysql/mysql.conf.d/mysqld.cnf
?(APT 安裝的默認路徑) -
/etc/mysql/mysql.conf.d/mysqld_safe_sql_mode.cnf
使用以下命令查找配置文件:
sudo grep -R "sql_mode" /etc/mysql/
步驟 2:編輯配置文件
-
使用文本編輯器打開配置文件(以?
mysqld.cnf
?為例):sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
-
在?
[mysqld]
?部分添加?sql_mode
:[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
-
如果?
[mysqld]
?已存在其他配置,直接追加這一行。 -
如果配置文件中已有?
sql_mode
?行,直接修改它的值。
-
-
保存并退出:
-
Nano 編輯器:按?
Ctrl+O
?保存 → 按?Ctrl+X
?退出。 -
Vim 編輯器:按?
Esc
?→ 輸入?:wq
?→ 回車。
-
步驟 3:重啟 MySQL 服務
sudo systemctl restart mysql
步驟 4:驗證修改是否生效
-
登錄 MySQL:
mysql -u root -p
-
查詢當前?
sql_mode
:SELECT @@sql_mode;
輸出應包含你設置的參數,且不包含?
STRICT_TRANS_TABLES
?或?NO_ZERO_DATE
。
常見問題解決
-
配置文件未生效:
-
確保修改的是?
[mysqld]
?部分的配置。 -
檢查是否有多個配置文件沖突(如?
my.cnf
?覆蓋了?mysqld.cnf
)。
-
-
權限問題:
-
使用?
sudo
?編輯配置文件。 -
重啟服務時確保有管理員權限。
-
-
語法錯誤:
-
檢查?
sql_mode
?值中的逗號和雙引號是否使用英文符號。 -
避免拼寫錯誤(如?
ONLY_FULL_GROUP_BY
?不要寫成?ONLY_FULL_GROUP_BY
)。
-
附加:臨時修改 SQL 模式(無需重啟)
如果只需臨時修改(重啟后失效):
-- 當前會話生效
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';-- 全局生效(直到下次重啟)
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
注意事項
-
數據一致性風險:關閉嚴格模式(如?
STRICT_TRANS_TABLES
)可能導致無效數據被插入,建議優先修復數據或表結構。 -
多環境同步:如果這是生產服務器,確保開發/測試環境的?
sql_mode
?配置一致。
通過以上步驟,你可以永久修改 MySQL 的?sql_mode
?以屏蔽日期錯誤問題。
2?/?2