首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

讓 MySQL 完美支援中文:從編譯安裝到生產配置完整指南

     編輯:MySQL 綜合教學

背景痛點

預設編譯的 MySQL 字元集為 latin1,導致中文存取頻繁出現亂碼,開發被迫在應用層做 GBK/UTF-8 雙向轉換,浪費 CPU 且易出錯。本文記錄從原始碼編譯安裝、配置字元集、驗證生效的完整流程(以 Slackware Linux 為例,原理通用)。

前置準備:移除系統自帶 MySQL

removepkg mysql
groupadd mysql
useradd -g mysql -s /bin/bash -d /app/mysql mysql
mkdir -p /app/mysql && chown -R mysql:mysql /app/mysql

原始碼編譯安裝(關鍵:指定字元集)

cd /app
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(支援中文、相容 GB2312)
  • --with-extra-charsets:編譯支援額外字元集,避免執行期動態載入失敗
  • -mcpu:依 CPU 型號優化,提升效能

初始化資料庫與啟動驗證

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

既有 UTF-8 資料庫中建立中文表的相容寫法

-- 方式 1:欄位級指定字元集
CREATE TABLE `test`.`cn` (
  `zh` CHAR(10) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL,
  `中文` INT(11) NOT NULL
) ENGINE = MYISAM;

-- 方式 2:建庫時指定預設字元集(推薦,簡潔無特殊痕跡)
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;

註:CHARACTER SET 寫 GB2312 或 GBK 均可,GBK 為超集,相容性更好。

驗證中文存取

mysql> use test;
mysql> insert into cn values("真的?",1);
mysql> select * from cn;
+--------+------+
| zh     | 中文 |
+--------+------+
| 真的? | 1    |
+--------+------+

持久化啟動配置

編輯 /etc/rc.d/rc.mysqld(或系統對應的啟動腳本):

# 修改路徑
/app/mysql/bin/mysqld_safe
/app/mysql/var/web.pid

# 追加參數
/app/mysql/bin/mysqld_safe --user=root --default-character-set=gbk &

現代化建議:改用 utf8mb4

GBK 為雙位元組編碼,不支援 Emoji、生僻字,且跨系統交互易出現編碼轉換問題。新專案強烈建議全鏈路採用 utf8mb4:

  • 編譯參數:--with-charset=utf8mb4 --with-extra-charsets="utf8mb4 gbk big5"
  • 配置檔:character-set-server = utf8mb4 / collation-server = utf8mb4_unicode_ci
  • 應用連線:SET NAMES utf8mb4 或連線參數 charset=utf8mb4

總結

透過原始碼編譯指定預設字元集、初始化時帶入參數、配置檔固化、啟動腳本持久化,可從根本上解決 MySQL 中文支援問題。現代專案請直接採用 utf8mb4 全鏈路,避免 GBK/UTF-8 混用帶來的維護負債。

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