Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA9' for column 'Sname' at row 1??數據庫、表、列、連接四層字符集不一致,導致編碼轉換失敗。MySQL 5.7 默認 utf8mb4,但舊應用常假設 utf8(實為 utf8mb3)。
my.cnf / my.ini)[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET NAMES utf8mb4' [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
注意:必須放在 [mysqld] 區塊末尾,否則導致服務啟動失敗。

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE t (c VARCHAR(100)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE t MODIFY c VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
JDBC 示例:
jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
PHP PDO:
$dsn = "mysql:host=localhost;dbname=mydb;charset=utf8mb4";
SET NAMES utf8mb4; SET CHARACTER SET utf8mb4;
SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%';
期望輸出關鍵項均為 utf8mb4。
utf8 ≠ utf8mb4:前者僅支持 BMP 平面(3 字節),不支持 Emoji/罕見漢字(4 字節)utf8mb4_unicode_ci vs utf8mb4_general_ci:前者按 Unicode 標準排序,後者簡化規則,性能略高但準確度略低ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 實際轉換數據