預設 MySQL 字符集非 GBK,導致中文開發頻繁在 GBK/UTF-8 轉換中消耗資源。本文記錄從源碼編譯安裝、配置字符集到驗證的完整流程(以 Slackware 為例,通用原理)。
先確保 OS 支援中文(參考 LinuxSir.org Slackware 討論區),再卸載系統自帶 MySQL:
removepkg mysql
groupadd mysql mkdir /app/mysql && chmod 744 /app/mysql useradd -G mysql -s /bin/bash -d /app/mysql mysql chown -R mysql.mysql /app/mysql
gunzip < mysql-VERSION.tar.gz | tar -xvf - 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
-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 & ./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
四個 gbk 即代表成功。
CREATE TABLE `test`.`cn` ( `zh` CHAR(10) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL, `中文` INT(11) NOT NULL ) ENGINE = MYISAM;
CHARACTER SET 寫 gb2312 或 gbk 均可,gbk 較優。
CREATE DATABASE dbCN DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
CREATE TABLE `dbCN`.`cn` (
`zh` CHAR(10) NOT NULL,
`中文` INT(11) NOT NULL
) ENGINE = MYISAM;
INSERT INTO cn VALUES("真的?",1);
無需每欄聲明,簡潔無特殊痕跡。
用 MySQL Query Browser 或程式碼執行腳本。驗證:
bin/mysql -u root --default-character-set=gbk -p → SELECT * FROM cn; 正確顯示中文。
修改 /etc/rc.d/rc.mysqld:路徑指向 /app/mysql/bin/mysqld_safe,pid 檔路徑 /app/mysql/var/web.pid,啟動參數加 --user=root --default-character-set=gbk。