預設編譯的 MySQL 常不支援中文字元集 (GBK/Big5),導致中文資料存取亂碼。本文記錄在 Linux (Slackware 為例) 上重新編譯安裝 MySQL 4.x,內建 GBK/UTF-8 支援,並配置啟動參數與資料庫字元集的完整流程。
removepkg mysql
groupadd mysql
useradd -g mysql -s /bin/bash -d /app/mysql mysql
mkdir -p /app/mysql
chown -R mysql:mysql /app/mysql
tar -zxvf mysql-VERSION.tar.gz
cd mysql-VERSION
CFLAGS="-O3 -mcpu=pentium3" \
CXX=gcc \
CXXFLAGS="-O3 -mcpu=pentium3 -felide-constructors" \
./configure \
--prefix=/app/mysql \
--with-charset=gbk \
--with-extra-charsets="gbk,gb2312,big5,utf8" \
--with-unix-socket-path=/etc/mysql.sock \
--enable-local-infile \
--enable-thread-safe-client \
--enable-assembler \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static
make && make install
--with-charset=gbk:預設字元集設為 GBK。--with-extra-charsets:額外編入 GB2312、Big5、UTF-8 支援。-mcpu:依 CPU 型號優化 (如 pentium3, athlon-xp 等)。
cp support-files/my-medium.cnf /etc/my.cnf
cd /app/mysql
bin/mysql_install_db --user=root
chown -R root .
chown -R mysql var
chgrp -R mysql .
# 啟動時指定預設字元集
bin/mysqld_safe --user=root --default-character-set=gbk &
# 設定 root 密碼
bin/mysqladmin -u root password 'new-password'
# 驗證字元集
bin/mysql -u root --default-character-set=gbk -p
mysql> STATUS;
...
Server characterset: gbk
Db characterset: gbk
Client characterset: gbk
Conn. characterset: gbk
...
建議:在 CREATE DATABASE 指定預設字元集,建表時無需逐欄位聲明。
CREATE DATABASE dbCN DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
USE dbCN;
CREATE TABLE cn (
zh CHAR(10) NOT NULL,
`中文` INT(11) NOT NULL
) ENGINE=MYISAM;
INSERT INTO cn VALUES ('真的?', 1);
SELECT * FROM cn;
+--------+------+
| zh | 中文 |
+--------+------+
| 真的? | 1 |
+--------+------+
舊 UTF-8 資料庫中需支援中文欄位:單獨為欄位指定字元集:
CREATE TABLE `test`.`cn` (
`zh` CHAR(10) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL,
`中文` INT(11) NOT NULL
) ENGINE=MYISAM;
編輯 /etc/rc.d/rc.mysqld:
/app/mysql/bin/mysqld_safe 與 /app/mysql/var/web.pid--user=root --default-character-set=gbk重新編譯並正確配置字元集,是徹底解決 MySQL 中文亂碼的根本之道。生產環境建議統一採用 UTF-8 (utf8mb4) 作為預設字元集,避免 GBK/Big5 相容性問題,並確保應用程式、連線、資料庫、資料表、欄位五層字元集一致。