首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 中文化深度實踐:從原始碼編譯支援 GBK/UTF8 到資料庫層級字符集規劃

     編輯:MySQL 資料庫相關知識

背景

預設 MySQL 非中文友善,GBK/UTF8 轉換消耗資源。方案:重新編譯支援 GBK、資料庫/表/欄位層級統一聲明字符集。

原始碼編譯安裝(Slackware 範例)


# 移除系統自帶
removepkg mysql

# 建立用戶/目錄
groupadd mysql
mkdir /app/mysql && chmod 744 /app/mysql
useradd -g mysql -s /bin/bash -p /app/mysql mysql
chown -R mysql.mysql /app/mysql

# 下載解壓
gunzip < mysql-VERSION.tar.gz | tar xvf -
cd mysql-VERSION

# 編譯參數(針對 CPU 優化 -mcpu=pentium3 視硬體調整)
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

# 初始化
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 .

# 啟動並設定 root 密碼
./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

資料庫/表/欄位字符集聲明最佳實踐

舊庫(UTF8)建立中文表:欄位級聲明


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;
-- 無需欄位級聲明,自動繼承資料庫級 gbk

啟動腳本固化字符集

修改 /etc/rc.d/rc.mysqld:

  • 路徑指向 /app/mysql/bin/mysqld_safe
  • pid 檔路徑 /app/mysql/var/web.pid
  • 啟動參數追加 --user=root --default-character-set=gbk

現代建議

新專案**直接使用 utf8mb4**,避免 GBK 相容性問題,僅在維護舊系統時採用本文方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved