【重學MySQL】九十三、MySQL字符集與比較規則完全解析

【重學MySQL】九十三、MySQL字符集與比較規則完全解析

  • 一、字符集概述
    • 1.1 支持的字符集
    • 1.2 UTF8與UTF8MB4的區別
  • 二、比較規則(Collation)
    • 2.1 比較規則分類
    • 2.2 常見比較規則差異
  • 三、配置層級與繼承關系
    • 3.1 配置層級
    • 3.2 繼承關系
  • 四、最佳實踐與問題解決
    • 4.1 統一字符集
    • 4.2 數據遷移與轉換
    • 4.3 性能優化
    • 4.4 常見問題
  • 五、示例配置
    • 5.1 服務器級配置(`my.cnf`)
    • 5.2 創建數據庫與表
    • 5.3 修改現有表
  • 六、總結

一、字符集概述

字符集是MySQL中用于定義字符如何存儲、表示和比較的一組規則。它決定了數據庫如何存儲和檢索文本數據,并處理不同語言和特殊字符。

1.1 支持的字符集

MySQL支持多種字符集,常見字符集如下:

字符集描述
UTF8/UTF8MB4UTF8支持1-3字節字符,適合大多數場景;UTF8MB4擴展至4字節,支持emoji等特殊字符。
Latin1西歐語言,兼容ASCII,適用于英文和西歐語言。
GBK/GB2312簡體中文,GBK覆蓋更多字符,GB2312是其前身。
ASCII僅支持英文字符,每個字符占1字節。
UTF16使用16位編碼,適合存儲復雜字符集(如中文、日文、韓文)。

1.2 UTF8與UTF8MB4的區別

  • UTF8:最大支持3字節字符,無法存儲emoji等4字節字符。
  • UTF8MB4:支持4字節字符,是UTF8的超集,推薦用于現代應用。

二、比較規則(Collation)

比較規則決定字符串的排序和比較方式,它與字符集密切相關。

2.1 比較規則分類

規則類型描述
大小寫敏感utf8_bin(二進制比較),區分大小寫。
大小寫不敏感utf8_general_ci(通用規則),不區分大小寫。
語言特定utf8_spanish_ci(西班牙語規則),按特定語言排序。
Unicode標準utf8_unicode_ci(符合Unicode標準),排序更準確但性能略低。
最新規則MySQL 8.0+支持utf8mb4_0900_ai_ci,基于Unicode 9.0,支持更復雜的排序。

2.2 常見比較規則差異

  • utf8_general_ci:速度快,但排序可能不準確(如某些特殊字符)。
  • utf8_unicode_ci:遵循Unicode標準,排序更準確,但性能略低。
  • utf8mb4_0900_ai_ci:MySQL 8.0+默認規則,支持擴展的排序和比較功能。

三、配置層級與繼承關系

MySQL的字符集和比較規則可配置于四個層級,優先級從高到低為:列級 > 表級 > 數據庫級 > 服務器級

3.1 配置層級

層級配置方法
服務器級通過my.cnf配置文件或啟動參數(如--character-set-server=utf8mb4)。
數據庫級創建數據庫時指定:CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
表級創建表時指定:CREATE TABLE table (...) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
列級定義字段時指定:name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3.2 繼承關系

  • 若未顯式指定,低層級繼承高層級的設置。例如:
    • 表未指定字符集時,使用數據庫的字符集。
    • 列未指定字符集時,使用表的字符集。

四、最佳實踐與問題解決

4.1 統一字符集

  • 避免亂碼:確保服務器、數據庫、表、列的字符集一致,并與客戶端連接字符集匹配。
  • 客戶端連接設置
    SET NAMES utf8mb4;
    
    或在配置文件my.cnf中設置:
    [client]
    default-character-set = utf8mb4
    

4.2 數據遷移與轉換

  • 修改現有表的字符集
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  • 備份數據:修改字符集前務必備份,避免數據損壞。

4.3 性能優化

  • 選擇合適的比較規則
    • 對性能敏感的場景,選擇utf8_general_ci
    • 需要準確排序時,使用utf8_unicode_ciutf8mb4_0900_ai_ci

4.4 常見問題

  • 亂碼問題:檢查所有層級的字符集設置是否一致,并確保客戶端連接字符集正確。
  • 排序錯誤:確認比較規則是否符合需求,例如中文排序需選擇支持中文的規則(如utf8mb4_unicode_ci)。

五、示例配置

5.1 服務器級配置(my.cnf

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

5.2 創建數據庫與表

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

5.3 修改現有表

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

六、總結

  • 字符集決定存儲方式,比較規則決定排序和比較行為。
  • 優先使用UTF8MB4以支持更廣泛的字符,搭配utf8mb4_unicode_ciutf8mb4_0900_ai_ci確保準確排序。
  • 統一各層級的字符集設置,避免亂碼和性能問題。

通過合理配置字符集和比較規則,可確保MySQL高效、正確地處理多語言數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920798.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920798.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Kafka的延遲隊列

實現原理 通過topic區分不同的延遲時長,每個topic對于一個延遲,比如 topic100 僅存儲延遲 100ms 的消息,topic1000 僅存儲延遲 1s 的消息,依次類推。生產消息時,消息需按延遲時長投遞到對應的topic。消費消息時&#x…

LabVIEW轉速儀校準系統

LabVIEW 與機器視覺的智能校準系統以工控機為核心,整合標準源、智能相機等硬件,通過軟件實現校準流程自動化,支持 500-6000r/min 轉速范圍校準,覆蓋 5 類轉速測量儀,校準時間縮短約 70%,滿足計量院高效、精…

Synchronized 概述

1. 初識 synchronized 是 Java 中的關鍵字,是一種 同步鎖 ,可重入鎖,悲觀鎖。它修飾的對象有以下幾種: 具體表現為以下3種形式。 對于普通同步方法,鎖是當前實例對象。 對于靜態同步方法,鎖是當前類的 Clas…

通過Auth.log來查看VPS服務器是否被掃描和暴力破解及解決辦法

說明:很多人vps可能出現過被掃的情況,有的還被爆破了,這里提供下查看方法 查看用密碼登陸成功的IP地址及次數grep "Accepted password for root" /var/log/auth.log | awk {print $11} | sort | uniq -c | sort -nr | more查看用密…

碰一碰發視頻手機版源碼開發:支持OEM

**從事開發 20 年,見過不少技術風口起起落落,最近 “碰一碰發視頻” 又成了熱門話題。不少同行或剛入行的年輕人來問我,手機版源碼開發該從哪下手,怕踩坑、怕走彎路。今天就以一個老程序員的視角,把碰一碰發視頻手機版…

只出現一次的數字(總結)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄前言一、給定一個整數數組nums,除了某個元素只出現一次以外,其余元素均出現兩次。找出那個只出現一次的元素二、給你一個整數數組nums&#x…

Cesium 入門教程(十一):Camera相機功能展示

文章目錄一,Cesium 實際示例(含源代碼)1,vuecesium: 圍繞一個固定點自動左右旋轉2,vuecesium: flyto一個具體的實體位置3,vuecesium: flyto一個具體的點位置4&#xff0c…

go語言基本排序算法

package mainimport "fmt"func main() {BubbleSort()SelectSort()InsertSort()MergeSort()QuickSort()HeapSort()ShellSort() }//冒泡排序 func BubbleSort() {str : []int{9, 1, 5, 8, 3, 7, 4, 6, 2}for i : 0; i < len(str)-1; i {flag : falsefor j : len(str…

一步完成CalDAV賬戶同步,日歷服務助力釘釘日歷日程集中管理

在信息爆炸節奏飛快的今天&#xff0c;高效的管理時間已經成為我們工作和生活中的核心競爭力&#xff0c;復雜紛繁的日程安排&#xff0c;無處不在的提醒需求以及跨設備同步的困擾&#xff0c;這些問題仿佛都在呼喚著一個更智能、更便捷、更可靠的解決方案。 而華為日歷App&am…

企業內部機密視頻安全保護|如何防止企業內部機密視頻泄露?

在企業數字化進程飛速發展的今天&#xff0c;視頻內容已成為承載企業內部培訓、戰略會議、產品機密和核心技術的關鍵載體。一次意外的泄露&#xff0c;不僅可能導致知識產權流失&#xff0c;更會讓企業聲譽和市場競爭力遭受重創。面對無孔不入的安全威脅&#xff0c;企業該如何…

C# Deconstruct | 簡化元組與對象的數據提取

官方文檔&#xff1a;析構元組和其他類型 - C# | Microsoft Learn 標簽&#xff1a;Deconstruct、Tuple、record、模式匹配 PS&#xff1a;record相關內容后續還會繼續更新&#x1f504; 模式匹配可以查看我的另一篇&#x1f449;模式匹配 目錄1. 概述2. 基本用法2.1 元組解…

R 語言 ComplexUpset 包實戰:替代 Venn 圖的高級集合可視化方案

摘要 在生物信息學、數據挖掘等領域的集合分析中,傳統 Venn 圖在多維度數據展示時存在信息擁擠、可讀性差等問題。本文基于 R 語言的 ComplexUpset 包,以基因表達研究為場景,從包安裝、數據準備到可視化實現,完整演示如何制作正刊級別的集合交集圖,解決多條件下差異基因(…

?導游|基于SprinBoot+vue的在線預約導游系統

在線預約導游系統 基于SprinBootvue的在線預約導游系統 一、前言 二、系統設計 三、系統功能設計 前臺功能實現 后臺功能實現 管理員模塊實現 導游模塊實現 用戶模塊實現 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&am…

SQL server 異常 出現錯誤 824

2025-08-27 01:36:37,324 ERROR c.z.i.w.DatabaseUtils [Scheduled-7] Error executeStoredProcedure SQL script: sp_RefreshDWDByDateFive警告: 在 08 27 2025 1:36AM 出現錯誤 824。請記錄該錯誤和時間&#xff0c;并與您的系統管理員聯系。 2025-08-27 01:36:37,332 ERROR …

制造業生產線連貫性動作識別系統開發

制造業生產線連貫性動作識別系統開發 第一部分&#xff1a;項目概述與理論基礎 1.1 項目背景與意義 在現代智能制造環境中&#xff0c;盡管自動化程度不斷提高&#xff0c;但人工操作仍然在復雜裝配任務中扮演著不可替代的角色。研究表明&#xff0c;人機協作被視為打破傳統人機…

什么是Jmeter? Jmeter工作原理是什么?

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 第一篇 什么是 JMeter&#xff1f;JMeter 工作原理 1.1 什么是 JMeter Apache JMeter 是 Apache 組織開發的基于 Java 的壓力測試工具。用于對軟件做壓力測試&a…

Linux網絡基礎1(一)之計算機網絡背景

文章目錄計算機網絡背景網絡發展認識 "協議"高小琴例子方言例子計算機網絡背景 網絡發展 獨立模式: 計算機之間相互獨立; 網絡互聯: 多臺計算機連接在一起, 完成數據共享; 局域網LAN: 計算機數量更多了, 通過交換機和路由器連接在一起; 廣域網WAN: 將遠隔千里的計算…

如何在數學建模賽中實現模型創新?

模型創新性在國賽數學建模中&#xff0c;完備性是論文的基本要求&#xff0c;而創新性則是決定論文能否脫穎而出的關鍵因素。所謂創新&#xff0c;并不僅僅指提出完全新穎的數學理論&#xff0c;而是能夠在已有方法的基礎上&#xff0c;通過新的問題切入點、假設修正、模型優化…

【重磅發布】flutter_chen_updater-版本升級更新

Flutter Chen Updater 一個功能強大的Flutter應用內更新插件&#xff0c;支持Android APK自動下載、安裝和iOS跳轉App Store。 ? 特性 ? 跨平臺支持: Android APK自動更新&#xff0c;iOS跳轉App Store? 智能下載: 支持斷點續傳、文件校驗、多重備用方案? 權限管理: 自動處…

docker 1分鐘 快速搭建 redis 哨兵集群

使用 docker-compose 1 分鐘搭建好 1主2從3哨兵的 redis 哨兵集群 目錄結構 redis-sentinel-cluster ├── check_redis.sh ├── docker-compose.yml ├── redis │ └── redis.conf ├── sentinel │ └── sentinel.confdocker-compose.yml 配置 version: 3…