欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL?排序規(guī)則Collation實(shí)例詳解

 更新時(shí)間:2025年07月21日 09:10:23   作者:數(shù)據(jù)派  
本文將從基礎(chǔ)概念出發(fā),詳解排序規(guī)則的作用、與字符集的關(guān)系、查看與配置方法,并通過實(shí)際案例說明其對(duì)查詢結(jié)果的影響,幫助開發(fā)者精準(zhǔn)控制數(shù)據(jù)匹配行為,感興趣的朋友一起看看吧

在 MySQL 中,排序規(guī)則(Collation)是控制字符比較方式的核心機(jī)制,直接影響查詢結(jié)果的排序、匹配邏輯(如大小寫區(qū)分)等。本文將從基礎(chǔ)概念出發(fā),詳解排序規(guī)則的作用、與字符集的關(guān)系、查看與配置方法,并通過實(shí)際案例說明其對(duì)查詢結(jié)果的影響,幫助開發(fā)者精準(zhǔn)控制數(shù)據(jù)匹配行為。

一、排序規(guī)則的核心概念

排序規(guī)則(Collation)是字符集(Character Set)的 "配套規(guī)則",定義了字符之間的比較、排序邏輯。其核心作用體現(xiàn)在兩個(gè)維度:

  • 大小寫區(qū)分:是否將'a''A'視為相同字符;
  • 編碼適配:針對(duì)特定字符集(如 UTF-8)的語言特性(如 accents 字符)制定比較規(guī)則。

例如,UTF-8 字符集的utf8mb4_0900_ai_ci排序規(guī)則中:

  • ai表示 "accent-insensitive"(忽略重音);
  • ci表示 "case-insensitive"(忽略大小寫);
    utf8mb4_0900_as_cs中,as(accent-sensitive)和cs(case-sensitive)則表示區(qū)分重音和大小寫。

二、字符集與排序規(guī)則的關(guān)聯(lián)

字符集與排序規(guī)則是 "一對(duì)多" 的關(guān)系:一個(gè)字符集可以對(duì)應(yīng)多個(gè)排序規(guī)則,但每個(gè)排序規(guī)則僅屬于一個(gè)字符集。兩者的默認(rèn)關(guān)聯(lián)規(guī)則如下:

  • 若僅指定字符集,排序規(guī)則將使用該字符集的默認(rèn)值(如utf8mb4默認(rèn)排序規(guī)則為utf8mb4_0900_ai_ci);
  • 若僅指定排序規(guī)則,字符集將自動(dòng)匹配該排序規(guī)則對(duì)應(yīng)的字符集(如指定utf8mb4_general_ci,字符集即為utf8mb4)。

三、排序規(guī)則的查看與配置

1. 查看字符集與排序規(guī)則信息

查看所有字符集及其默認(rèn)排序規(guī)則:

-- 方法1:SHOW命令
SHOW CHARACTER SET;
-- 方法2:查詢系統(tǒng)表
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS;

查看指定字符集的所有排序規(guī)則:

-- 查看utf8mb4字符集的所有排序規(guī)則
SHOW COLLATION WHERE Charset = 'utf8mb4';

查看數(shù)據(jù)庫的默認(rèn)字符集與排序規(guī)則:

-- 方法1:使用系統(tǒng)變量
USE test_db; -- 切換到目標(biāo)數(shù)據(jù)庫
SELECT @@character_set_database, @@collation_database;
-- 方法2:查詢系統(tǒng)表
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA 
WHERE SCHEMA_NAME = 'test_db'; -- 替換為數(shù)據(jù)庫名

2. 不同對(duì)象的排序規(guī)則設(shè)置

MySQL 中,排序規(guī)則可在服務(wù)器、數(shù)據(jù)庫、表、列、字符串五個(gè)層級(jí)設(shè)置,下層默認(rèn)繼承上層配置(可單獨(dú)覆蓋)。

對(duì)象字符集設(shè)置方式排序規(guī)則設(shè)置方式說明
服務(wù)器character_set_server 系統(tǒng)變量collation_server 系統(tǒng)變量未指定時(shí),數(shù)據(jù)庫默認(rèn)繼承服務(wù)器配置
數(shù)據(jù)庫建庫時(shí) CHARACTER SET 子句建庫時(shí) COLLATE 子句未指定時(shí),表默認(rèn)繼承數(shù)據(jù)庫配置
建表時(shí) CHARACTER SET 子句建表時(shí) COLLATE 子句未指定時(shí),列默認(rèn)繼承表配置
字段定義中 CHARACTER SET 子句字段定義中 COLLATE 子句最細(xì)粒度控制,直接影響字段查詢邏輯
字符串常量SELECT _utf8mb4'abc'SELECT 'abc' COLLATE utf8mb4_general_ci臨時(shí)指定,覆蓋連接級(jí)別的默認(rèn)規(guī)則

四、排序規(guī)則對(duì)查詢結(jié)果的影響

排序規(guī)則不影響數(shù)據(jù)存儲(chǔ)(存入的'a''A'會(huì)原樣保存),但直接決定查詢時(shí)的匹配邏輯。以下通過測(cè)試案例驗(yàn)證:

測(cè)試環(huán)境

  • MySQL 版本:8.0.28
  • 測(cè)試表:test_db.a(字段ichar(1)類型)

案例 1:忽略大小寫的排序規(guī)則(utf8mb4_0900_ai_ci

-- 設(shè)置字段排序規(guī)則為忽略大小寫
ALTER TABLE test_db.a CHANGE i i CHAR(1) COLLATE utf8mb4_0900_ai_ci;
-- 插入數(shù)據(jù)
INSERT INTO test_db.a VALUES ('a'), ('A');
-- 查詢:條件為'i = 'a''
SELECT * FROM test_db.a WHERE i = 'a'; 
-- 結(jié)果:返回'a'和'A'(兩者被視為相同)

案例 2:區(qū)分大小寫的排序規(guī)則(utf8mb4_0900_as_cs

-- 設(shè)置字段排序規(guī)則為區(qū)分大小寫
ALTER TABLE test_db.a CHANGE i i CHAR(1) COLLATE utf8mb4_0900_as_cs;
-- 插入數(shù)據(jù)(同上)
INSERT INTO test_db.a VALUES ('a'), ('A');
-- 查詢:條件為'i = 'a''
SELECT * FROM test_db.a WHERE i = 'a'; 
-- 結(jié)果:僅返回'a'(嚴(yán)格區(qū)分大小寫)

結(jié)論

  • 字段的排序規(guī)則直接決定查詢時(shí)的字符匹配邏輯;
  • 若需查詢時(shí)區(qū)分大小寫,需將字段排序規(guī)則設(shè)置為*_cs(case-sensitive)類型;
  • 若需忽略大小寫,使用*_ci(case-insensitive)類型。

五、實(shí)踐建議

  • 明確大小寫需求:根據(jù)業(yè)務(wù)場(chǎng)景選擇排序規(guī)則。例如,用戶名通常需要區(qū)分大小寫(用*_cs),而商品名稱可能忽略大小寫(用*_ci)。

  • 統(tǒng)一配置層級(jí):建議在數(shù)據(jù)庫或表級(jí)別統(tǒng)一設(shè)置排序規(guī)則,避免列級(jí)別配置混亂(特殊字段單獨(dú)覆蓋)。

查詢時(shí)臨時(shí)覆蓋:如需臨時(shí)改變匹配邏輯,可在查詢中指定排序規(guī)則:

-- 臨時(shí)按區(qū)分大小寫查詢(即使字段默認(rèn)不區(qū)分)
SELECT * FROM test_db.a WHERE i COLLATE utf8mb4_0900_as_cs = 'a';
  • 注意連接級(jí)影響:客戶端連接的collation_connection變量會(huì)影響字符串常量的匹配邏輯,若需一致行為,建議在字段級(jí)別顯式指定排序規(guī)則。

總結(jié)

MySQL 排序規(guī)則是控制字符比較邏輯的關(guān)鍵機(jī)制,其核心作用體現(xiàn)在查詢階段的匹配與排序行為。通過理解字符集與排序規(guī)則的關(guān)聯(lián)、掌握多層級(jí)配置方法,并結(jié)合業(yè)務(wù)場(chǎng)景選擇合適的規(guī)則(如區(qū)分 / 忽略大小寫),可確保查詢結(jié)果符合預(yù)期,避免因字符匹配問題導(dǎo)致的業(yè)務(wù)異常。

到此這篇關(guān)于MySQL 排序規(guī)則Collation實(shí)例詳解的文章就介紹到這了,更多相關(guān)mysql排序規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql高效導(dǎo)數(shù)據(jù)的方法講解

    mysql高效導(dǎo)數(shù)據(jù)的方法講解

    模擬現(xiàn)網(wǎng)測(cè)試,需要搭建測(cè)試環(huán)境,導(dǎo)入上億級(jí)的數(shù)據(jù)到數(shù)據(jù)庫。對(duì)于到的問題做些簡(jiǎn)單記錄,有需要的朋友可以參考一下
    2013-09-09
  • MySQL 生成隨機(jī)數(shù)字、字符串、日期、驗(yàn)證碼及 UUID的方法

    MySQL 生成隨機(jī)數(shù)字、字符串、日期、驗(yàn)證碼及 UUID的方法

    這篇文章主要介紹了MySQL 生成隨機(jī)數(shù)字、字符串、日期、驗(yàn)證碼及 UUID的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Windows下MySQL5.6查找my.ini配置文件的方法

    Windows下MySQL5.6查找my.ini配置文件的方法

    今天小編就為大家分享一篇Windows下MySQL5.6查找my.ini配置文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • MySQL邏輯備份的實(shí)現(xiàn)步驟

    MySQL邏輯備份的實(shí)現(xiàn)步驟

    本文主要介紹了MySQL邏輯備份的實(shí)現(xiàn)步驟,包括使用mysqldump和mysqlpump工具進(jìn)行備份和恢復(fù),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • MySQL為id選擇合適的數(shù)據(jù)類型

    MySQL為id選擇合適的數(shù)據(jù)類型

    為 id 列選擇一個(gè)好的數(shù)據(jù)類型非常重要,id 列會(huì)經(jīng)常用于做比較(例如聯(lián)合查詢的條件),以及用于查找其他列。而且,id 也經(jīng)常用于外鍵。因此,id 列的數(shù)據(jù)類型不僅僅關(guān)系自身數(shù)據(jù)表,也關(guān)系到與之關(guān)聯(lián)的其他數(shù)據(jù)表。因此,id 用何種數(shù)據(jù)類型就顯得十分重要
    2021-06-06
  • MySql閃退和服務(wù)無法啟動(dòng)的解決方法

    MySql閃退和服務(wù)無法啟動(dòng)的解決方法

    今天小編就為大家分享一篇關(guān)于MySql閃退和服務(wù)無法啟動(dòng)的解決方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 避免MySQL中的隱式轉(zhuǎn)換的方法小結(jié)

    避免MySQL中的隱式轉(zhuǎn)換的方法小結(jié)

    在 MySQL 中,隱式轉(zhuǎn)換可能導(dǎo)致索引失效、結(jié)果不符合預(yù)期或性能問題,以下是避免隱式轉(zhuǎn)換的具體方法,從表設(shè)計(jì)、查詢編寫到配置優(yōu)化,逐步減少隱式轉(zhuǎn)換的發(fā)生,具體操作過程跟隨小編一起看看吧
    2025-04-04
  • MySQL開啟事務(wù)的方式

    MySQL開啟事務(wù)的方式

    本篇文章給大家分享MySQL 是如何開啟一個(gè)事務(wù)的,原文通過兩種方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • MySQL緩存的查詢和清除命令使用詳解

    MySQL緩存的查詢和清除命令使用詳解

    這篇文章主要介紹了MySQL緩存的查詢和清除命令使用詳解,對(duì)于一些不常改變數(shù)據(jù)且有大量相同sql查詢的表,查詢緩存會(huì)顯得比較有用一些,需要的朋友可以參考下
    2015-12-12
  • MySQL5.7.17安裝及配置圖文教程

    MySQL5.7.17安裝及配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了MySQL5.7.17安裝及配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評(píng)論