YYYY-MM-DD HH:MM:SS,4.0 需加 --new 參數才一致。'a' > 'a\t' 在 4.1 為真。DATE/DATETIME/TIME,不再是字串。ALTER TABLE ... ENGINE=InnoDB 或 mysqldump 重導)。CHECK TABLE → OPTIMIZE TABLE 或 REPAIR TABLE 修復。0x00 而非空格,取值不再去尾端空格。YYYYMMDDHHMMSS,後為 YYYYMMDDHHMMSS.000000。INOUT 等,檢查欄位名是否衝突。'2006/11/24 09:14:00' 合法,'2006/11/2409:14:00' 在 5.0 會失敗。FLUSH TABLES WITH READ LOCK;.frm/.MYD/.MYI 檔案。mysqldump --single-transaction --databases db1 db2 > innodb.sqldatadir;mysql < innodb.sql。mysql_upgrade -u root -p(修復系統表、檢查相容性)。| 現象 | 原因 | 解決 |
|---|---|---|
DATE_FORMAT 回傳 NULL 或錯誤 | 輸入格式不符嚴格解析 | 統一輸入格式為 YYYY-MM-DD HH:MM:SS 或使用 STR_TO_DATE 預處理 |
| DECIMAL 計算結果不同 | 精確數學模式 | 檢查應用層四捨五入邏輯,必要時 CAST(... AS DECIMAL(p,s)) |
| FLOAT/DOUBLE 比較失敗 | 浮點數精度差異 | 改用 DECIMAL 或 ABS(a-b) < epsilon 比較 |
| 表名大小寫敏感不同 | lower_case_table_names 預設值差異 | 統一設為 1(不分大小寫)或 0(分大小寫),並轉換既有表名 |
升級核心在於「時間型別、數值型別、字元集、關鍵字、嚴格模式」五大面向。建議先在測試環境完整跑迴歸測試,確認無誤再排程生產升級,並預留回滾方案(保留 4.0 實例快照)。