預設字符集非 gbk/utf8,導致中文存取亂碼、頻繁轉碼消耗資源。徹底解決需從編譯、配置、建表三層面著手。
# 移除舊版
removepkg mysql
groupadd mysql
useradd -g mysql -s /bin/bash -d /app/mysql mysql
mkdir /app/mysql && chown -R mysql.mysql /app/mysql
# 下載原始碼並編譯
tar xzf 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
-mcpu 依 CPU 型號調整(如 pentium4、athlon-xp),可提升 5-15% 效能。
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
CREATE TABLE `test`.`cn` ( `zh` CHAR(10) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL, `中文` INT(11) NOT NULL ) ENGINE=MYISAM;
CHARACTER SET 可寫 gbk(超集,含生僻字)或 gb2312。
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);
編輯 /etc/rc.d/rc.mysqld,修改路徑並追加:
/app/mysql/bin/mysqld_safe --user=root --default-character-set=gbk
utf8mb4 + utf8mb4_unicode_ci,支援 Emoji 且無轉碼煩惱。SET NAMES gbk、my.cnf default-character-set、建表指定 CHARSET 三層保障同樣可行。