本文基於 Debian Etch Linux 實測,採用 Intel ICC 編譯版 MySQL 5.0.27(官方宣稱性能提升 10-20%),搭配 JDBC、Resin、Spring、Hibernate 全鏈路 UTF-8 實戰驗證,提供從下載到中文零亂碼的標準化部署流程。
latin1mysql-standard-5.0.27-linux-i686-icc-glibc23.tar.gz(ICC 版優先)tar zxvf mysql-standard-5.0.27-linux-i686-icc-glibc23.tar.gz -C /usr/local/groupadd mysql
useradd -g mysql mysql
cd /usr/local && ln -s mysql-standard-5.0.27-linux-i686-icc-glibc23 mysqlcd /usr/local/mysql./scripts/mysql_install_db --user=mysqlchown -R root .
chown -R mysql data
chgrp -R mysql .
/etc/my.cnf 核心配置(關鍵步驟):
[mysqld]
# 默認使用 InnoDB 事務引擎
default-storage-engine=INNODB
# === 全局強制 UTF-8 ===
character-set-server=utf8
collation-server=utf8_general_ci
default-character-set=utf8
# 禁用 BDB 引擎(節省內存)
skip-bdb
/usr/local/mysql/bin/mysqld_safe --user=mysql &/usr/local/mysql/bin/mysqladmin -u root -p password 'new-password'(舊密碼為空直接回車)mysql -u root -p
CREATE USER 'app_user' IDENTIFIED BY 'strong-password';
CREATE DATABASE app_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON app_db.* TO 'app_user'@'localhost' IDENTIFIED BY 'strong-password';
FLUSH PRIVILEGES;
必須顯式指定庫/表 CHARSET=utf8 COLLATE=utf8_general_ci,否則繼承服務器默認 latin1 導致中文亂碼。
GRANT ALL ON app_db.* TO 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong-password';
/usr/local/mysql/bin/mysqladmin -u root -p shutdown登錄 MySQL 依次執行,確保全鏈路 utf8:
-- 1. 總覽
STATUS;
-- 關注 Server characterset、Db characterset、Client characterset、Conn characterset 均為 utf8
-- 2. 詳細變量檢查
SHOW VARIABLES LIKE '%char%';
-- 除 character_set_filesystem=binary 外,其餘應全為 utf8
-- 3. 排序規則檢查
SHOW VARIABLES LIKE '%collation%';
-- 應全為 utf8_general_ci
-- 4. 庫級編碼確認
mysqlshow -u root -p -i db_name
-- 若顯示 latin1_swedish_ci,必須刪庫重建(參考步驟 11)
my.cnf 位置優先級:/etc/my.cnf > /usr/local/mysql/my.cnf > ~/.my.cnf,建議統一用 /etc/my.cnfjdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNullhibernate.connection.CharSet=utf8、hibernate.connection.characterEncoding=utf8、hibernate.connection.useUnicode=true