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

MySQL 完全中文化實戰:從編譯安裝到字符集配置的完整遷移指南

     編輯:MySQL 資料庫相關知識

為什麼要中文化

預設字符集非 gbk/utf8,導致中文存取亂碼、頻繁轉碼消耗資源。徹底解決需從編譯、配置、建表三層面著手。

原始碼編譯安裝(以 Slackware/Linux 為例)

# 移除舊版
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

現有 UTF-8 資料庫加入中文欄位

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 三層保障同樣可行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved