最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

  • 大小寫區(qū)分:是否將'a''A'視為相同字符;
  • 編碼適配:針對特定字符集(如 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ī)則的關聯(lián)

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

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

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

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

查看所有字符集及其默認排序規(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ù)庫的默認字符集與排序規(guī)則:

-- 方法1:使用系統(tǒng)變量
USE test_db; -- 切換到目標數(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. 不同對象的排序規(guī)則設置

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

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

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

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

測試環(huán)境

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

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

-- 設置字段排序規(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

-- 設置字段排序規(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'(嚴格區(qū)分大小寫)

結(jié)論

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

五、實踐建議

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

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

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

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

總結(jié)

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

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

相關文章

  • MySql中的IFNULL、NULLIF和ISNULL用法詳解

    MySql中的IFNULL、NULLIF和ISNULL用法詳解

    在做項目中發(fā)現(xiàn)MySql里的isnull和mssql里的有點不同。接下來小編通過本文給大家介紹MySql中的IFNULL、NULLIF和ISNULL用法詳解的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • 簡單介紹下MYSQL的索引類型

    簡單介紹下MYSQL的索引類型

    本文介紹了七種MySQL索引類型。在數(shù)據(jù)庫表中,對字段建立索引可以大大提高查詢速度。通過善用這些索引,可以令MySQL的查詢和運行更加高效。
    2015-07-07
  • 最全50個Mysql數(shù)據(jù)庫查詢練習題

    最全50個Mysql數(shù)據(jù)庫查詢練習題

    這篇文章主要介紹了最全50個數(shù)據(jù)庫查詢練習題,Mysql數(shù)據(jù)庫版本,全部都驗證過
    2020-12-12
  • MySQL數(shù)據(jù)庫服務器端核心參數(shù)詳解和推薦配置

    MySQL數(shù)據(jù)庫服務器端核心參數(shù)詳解和推薦配置

    MySQL手冊上也有服務器端參數(shù)的解釋,以及參數(shù)值的相關說明信息,現(xiàn)針對我們大家重點需要注意、需要修改或影響性能 的服務器端參數(shù),作其用處的解釋和如何配置參數(shù)值的推薦,此事情拖了不少時間,為方便大家?guī)兔m錯
    2011-12-12
  • MySQL Order By Rand()效率分析

    MySQL Order By Rand()效率分析

    本文詳細解說了MySQL Order By Rand()效率優(yōu)化的方案,并給出了優(yōu)化的思路過程,是篇不可多得的MySQL Order By Rand()效率美文
    2012-07-07
  • MySQL錯誤ERROR 1615 解決方法

    MySQL錯誤ERROR 1615 解決方法

    這篇文章主要介紹了MySQL錯誤ERROR 1615 解決方法,這個問題是由于Mysql配置不當造成的,需要的朋友可以參考下
    2015-01-01
  • 詳解Ubuntu Server下啟動/停止/重啟MySQL數(shù)據(jù)庫的三種方式

    詳解Ubuntu Server下啟動/停止/重啟MySQL數(shù)據(jù)庫的三種方式

    本篇文章主要介紹了buntu Server下啟動/停止/重啟MySQL數(shù)據(jù)庫的三種方式,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • 聊聊MySQL事務的特性和隔離級別

    聊聊MySQL事務的特性和隔離級別

    這篇文章主要介紹了MySQL事務的特性和隔離級別的相關資料,幫助大家粗略的認識下MySQL 事務的相關知識,感興趣的朋友可以了解下
    2020-09-09
  • 深入研究mysql中的varchar和limit(容易被忽略的知識)

    深入研究mysql中的varchar和limit(容易被忽略的知識)

    這篇文章主要介紹了深入研究mysql中的varchar和limit(容易被忽略的知識),本文探究了varchar(5)可以存儲多少個漢字、多少個字母數(shù)字和mysql中的limit你真的會用嗎兩個知識點,需要的朋友可以參考下
    2015-03-03
  • MYSQL中鎖的分類與加鎖方式小結(jié)

    MYSQL中鎖的分類與加鎖方式小結(jié)

    MySQL通過表級鎖和行級鎖兩種機制來控制并發(fā)事務對數(shù)據(jù)的訪問,以避免數(shù)據(jù)不一致、臟讀和幻讀等問題,表級鎖包括顯式鎖、元數(shù)據(jù)鎖和意向鎖,而行級鎖包括記錄鎖、間隙鎖和臨鍵鎖,本文介紹MYSQL中鎖的分類與加鎖方式小結(jié),感興趣的朋友跟隨小編一起看看吧
    2026-03-03

最新評論

潼关县| 乌拉特后旗| 香河县| 临潭县| 特克斯县| 汕尾市| 三明市| 洞口县| 三明市| 岢岚县| 开江县| 黎川县| 忻州市| 始兴县| 洪泽县| 永胜县| 射阳县| 靖安县| 柳江县| 潮州市| 壶关县| 东山县| 安顺市| 霍城县| 伊春市| 安阳市| 潜江市| 彭水| 阜平县| 九龙县| 建宁县| 沙湾县| 崇州市| 盐边县| 湖口县| 郎溪县| 承德市| 甘谷县| 莆田市| 光山县| 丹东市|