Data too long for column 'xxx' at row 1
乍看像欄位長度不夠,實際卻是**字符集編碼不匹配**導致的位元組長度暴增。
// PHP mysql 擴展(已棄用)
mysql_query("SET NAMES 'gbk'"); // 或 utf8
// PHP mysqli
$mysqli->set_charset('gbk'); // 或 utf8
// PDO
$pdo = new PDO('mysql:host=...;charset=gbk', 'user', 'pass');
⚠️ 若庫建表時已用 UTF-8,這裡必須設 utf8;若用 GBK,設 gbk。**連線字符集必須與表欄位字符集一致**。
SHOW CREATE TABLE tblname → 確認欄位 CHARSETSHOW VARIABLES LIKE 'character_set_%' → 確認 client/connection/resultsmysqli_character_set_name($link) / PDO::getAttribute(PDO::ATTR_SERVER_VERSION) 確認連線字符集INSERT ... VALUES ('測試') → SELECT HEX(col), CHAR_LENGTH(col), LENGTH(col) 對照# my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 建表
CREATE TABLE t (c VARCHAR(100)) CHARSET=utf8mb4;
# PHP
$mysqli->set_charset('utf8mb4');
// 或 PDO DSN charset=utf8mb4
「Data too long」90% 是字符集假象。統一全鏈路 utf8mb4,徹底告別編碼地獄。