latin1,存入中文即截斷/錯誤編碼。CHARACTER SET 與 COLLATE 需一致。強烈建議全鏈路採用 utf8mb4(MySQL 5.5.3+)或 utf8,完整支援所有 Unicode 字符(含 Emoji)。
# /etc/mysql/my.cnf
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
若啟動報錯,將 mysqld 區段改為 character_set_server = utf8。
# /etc/mysql/my.cnf
[client]
default-character-set = utf8
[mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci
修改後執行 service mysql restart,再以 SHOW VARIABLES LIKE 'character_set_%'; 驗證。
-- 建庫指定字元集與排序規則
CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
-- 建表指定引擎與字元集
CREATE TABLE `database_user` (
`ID` VARCHAR(40) NOT NULL DEFAULT '',
`UserID` VARCHAR(40) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
「建庫、建表、連線」三端統一編碼,亂碼問題 99% 可避免。
-- 檢視伺服器預設
SHOW VARIABLES LIKE '%char%';
-- 檢視資料庫編碼
SHOW CREATE DATABASE `test`;
-- 檢視資料表編碼
SHOW CREATE TABLE `yjdb`;
-- 修改資料庫預設編碼(僅影響後續新建表)
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 修改資料表預設編碼(僅影響後續新增欄位)
ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 將現有資料轉碼(需謹慎,建議先備份)
ALTER TABLE `tb_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
SET NAMES utf8; → 匯入。SET NAMES gbk; → 匯入。<meta charset="utf-8">(或 GBK)。?useUnicode=true&characterEncoding=utf-8(JDBC)或對應驅動參數。SET NAMES utf8(或 gbk)。