MySQL 可在不同 SQL 模式下運行,定義支援的 SQL 語法與資料驗證嚴格程度。透過啟動參數 --sql-mode 或執行期 SET [SESSION|GLOBAL] sql_mode='modes' 切換。MySQL 4.1 起支援動態調整。
Linux 安裝後預設 sql_mode 為空,屬「非嚴格模式」:
'0000-00-00 00:00:00' 等非法值。CREATE TABLE t5 (c1 CHAR(3));
INSERT INTO t5 VALUES ('abcd'); -- 實際存入 'abc'
開啟後,非法值將直接報錯並回滾操作:
SET SESSION sql_mode='STRICT_TRANS_TABLES';
INSERT INTO t5 VALUES ('abcd');
-- ERROR 1406 (22001): Data too long for column 'c1' at row 1
STRICT_TRANS_TABLES(事務表嚴格)或 STRICT_ALL_TABLES(全表嚴格)。