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

MySQL 創建數據庫指定字符集 utf8mb4 的標準語句與最佳實踐

     編輯:MySQL 綜合教學

標準創建語句

CREATE DATABASE `db_name`
  DEFAULT CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;  -- 或 utf8mb4_unicode_ci

字符集與排序規則選型

組合特點適用場景
utf8mb4_general_ci速度快、排序簡單(按字符碼點),不區分德語 ß/ss 等通用業務、高併發、不需嚴格多語言排序
utf8mb4_unicode_ci遵循 UCA(Unicode Collation Algorithm),多語言排序準確國際化產品、多語言排序、嚴格語義正確性要求
utf8mb4_0900_ai_ci (8.0+)基於 Unicode 9.0,支援表情符號排序、重音不敏感MySQL 8.0 新項目首選,最現代

驗證與修正

-- 查看庫字符集
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='db_name';

-- 修正已有庫
ALTER DATABASE `db_name` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

配套配置(雙保險)

1. 服務端 my.cnf

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
# init_connect='SET NAMES utf8mb4'  -- 要求客戶端無 SUPER 權限時慎用

2. 客戶端連接參數

  • JDBC:jdbc:mysql://host:3306/db?characterEncoding=utf8mb4&useSSL=false
  • Python PyMySQL:charset='utf8mb4'
  • Go sqlx:db.SetConnMaxLifetime(time.Hour); db.Exec("SET NAMES utf8mb4")
  • PHP PDO:charset=utf8mb4 in DSN

避坑:utf8 vs utf8mb4

項目utf8 (MySQL 別名 utf8mb3)utf8mb4
最大字節/字符34
支援 Emoji❌ 存入報錯或截斷✅ 完整支援
支援生僻漢字❌ 僅 BMP 平面✅ 含擴展平面
索引前綴長度限制767 字節 → 255 字符767 字節 → 191 字符(需 innodb_large_prefix 放寬至 3072/768)

結論:**全鏈路強制 utf8mb4**,棄用 utf8。


存量庫表遷移腳本生成

SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA IN ('db1','db2') AND TABLE_TYPE='BASE TABLE';

大表生產環境請用 pt-online-schema-change 或 gh-ost 在線遷移。

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