MySQL 資料表插入中文報 Data too long for column,僅「女」字能插入。註釋 my.ini 中 sql_mode=STRICT_TRANS_TABLES... 後 DOS 下可插入,但 MyEclipse 仍報錯。
latin1)與連線字元集(如 utf8/utf8mb4)不一致,導致位元組長度計算錯誤。一個 UTF-8 中文 3 位元組,若欄位定義 VARCHAR(10) 按字元計算卻按位元組存儲,極易超長。characterEncoding 參數),導致行為不一致。-- 資料庫/資料表/欄位
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 欄位長度按字元語意
ALTER TABLE mytable MODIFY col VARCHAR(100) CHARACTER SET utf8mb4;
-- JDBC 連線字串
jdbc:mysql://host:3306/mydb?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC
不要關閉 STRICT_TRANS_TABLES,它是資料完整性守門員。改為:
VARCHAR(n CHAR) 或改用 TEXT)。SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
確保 character_set_client、connection、results、database 皆為 utf8mb4。
utf8 實為 utf8mb3,不支援 Emoji/罕見字,務必用 utf8mb4。characterEncoding 與 useUnicode 必須顯式指定。utf8mb4 + utf8mb4_unicode_ci。CHAR 語意(VARCHAR(100 CHAR))或改 TEXT。characterEncoding=utf8&useUnicode=true。STRICT_TRANS_TABLES,應用層做長度校驗。字元集不一致是中文亂碼/截斷的萬惡之源,統一全鏈路 utf8mb4 才是正解。