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

MySQL?字符集、排序規(guī)則與查詢關(guān)系最佳實(shí)踐

 更新時(shí)間:2025年06月27日 08:57:55   作者:曾左  
MySQL查詢是否區(qū)分大小寫和重音敏感由字符集與排序規(guī)則決定,推薦使用utf8mb4字符集及utf8mb4_general_ci排序規(guī)則,本文給大家介紹MySQL字符集、排序規(guī)則與查詢關(guān)系詳解,感興趣的朋友一起看看吧

MySQL 查詢是否區(qū)分大小寫及重音敏感,取決于創(chuàng)建時(shí)指定的字符集(character set)和排序規(guī)則(collation)。

(1)字符集(Character Set):規(guī)定可存儲(chǔ)的字符,如 utf8、utf8mb4、latin1 等。

(2)排序規(guī)則(Collation):確定字符比較與排序規(guī)則,如是否區(qū)分大小寫、重音等。

注意:

(1)每個(gè)排序規(guī)則必須對(duì)應(yīng)特定的字符集,如 utf8mb4_bin 僅用于 utf8mb4 字符集。

(2)“重音敏感”(Accent Sensitive):指排序規(guī)則將帶重音符號(hào)的字母視為與基本字母相同或不同的特性,如 'cafe' 與 'café'。

在 MySQL 5.7 中,默認(rèn)字符集和排序規(guī)則是 latin1 和 latin1_swedish_ci。實(shí)際應(yīng)用里,建議使用 utf8mb4 字符集以支持完整 Unicode 字符(含 emoji),并采用默認(rèn)對(duì)應(yīng)的 utf8mb4_general_ci 排序規(guī)則,該規(guī)則下查詢不區(qū)分大小寫。

一、常見排序規(guī)則

排序規(guī)則對(duì)應(yīng)字符集大小寫敏感重音敏感適用版本說明
utf8_general_ciutf8??所有版本基本 Unicode 比較
utf8mb4_general_ciutf8mb4??5.5.3+默認(rèn)的 utf8mb4 排序規(guī)則
latin1_swedish_cilatin1??所有版本傳統(tǒng)西歐默認(rèn)排序規(guī)則
utf8mb4_unicode_ciutf8mb4??5.5.3+符合 Unicode 標(biāo)準(zhǔn)的更準(zhǔn)確排序
utf8mb4_0900_ai_ciutf8mb4??8.0+基于 Unicode 9.0 標(biāo)準(zhǔn)
utf8_binutf8??所有版本二進(jìn)制比較(嚴(yán)格區(qū)分大小寫)
utf8mb4_binutf8mb4??5.5.3+utf8mb4 的二進(jìn)制比較
utf8mb4_unicode_csutf8mb4??5.5.3+已棄用,改用 utf8mb4_bin
utf8mb4_0900_as_csutf8mb4??8.0+嚴(yán)格區(qū)分大小寫和重音

表格說明:

(1)可通過排序規(guī)則后綴判斷其是否支持大小寫和重音敏感,ci、cs、ai、as 分別表示不區(qū)分大小寫、區(qū)分大小寫、不區(qū)分重音和區(qū)分重音。

(2)帶 bin 后綴的排序規(guī)則基于二進(jìn)制(Binary)比較,嚴(yán)格區(qū)分和重音。

二、設(shè)置方法

1. 數(shù)據(jù)庫實(shí)例級(jí)

# my.conf 或 my.ini
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

2. 數(shù)據(jù)庫級(jí)

CREATE DATABASE mydb 
  CHARACTER SET utf8mb4 
  COLLATE utf8mb4_general_ci;

3. 表級(jí)

CREATE TABLE case_sensitive_table (
    id INT,
    username VARCHAR(50)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

4. 列級(jí)

CREATE TABLE case_sensitive_table (
    id INT,
    username VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

三、設(shè)置建議

1. 注意事項(xiàng)

(1)性能影響:使用區(qū)分大小寫的比較可能會(huì)影響查詢性能,混合使用不同字符集也可能影響查詢優(yōu)化

(2)存儲(chǔ)空間:不同字符集占用的存儲(chǔ)空間不同 (如 utf8mb4 比 latin1 占用更多空間)

(3)索引限制:某些情況下不同字符集的列不能直接比較或連接

(4)轉(zhuǎn)換風(fēng)險(xiǎn):修改已有數(shù)據(jù)的字符集前需謹(jǐn)慎,可能導(dǎo)致數(shù)據(jù)丟失或損壞

2. 最佳實(shí)踐

(1)盡量保持各表及表內(nèi)各列字符集和排序規(guī)則一致,除非有特殊需求

(2)修改已有數(shù)據(jù)的字符集前先備份數(shù)據(jù)

(3)對(duì)于需要區(qū)分大小寫的列 (如用戶名、驗(yàn)證碼),明確指定使用_bin排序規(guī)則

(4)應(yīng)文檔化說明使用不同字符集/排序規(guī)則的原因

(5)MySQL 8.0 默認(rèn)使用 utf8mb4 + utf8mb4_0900_ai_ci,它符合更新的 Unicode 標(biāo)準(zhǔn)且性能更優(yōu)

四、查看方法

## 查看數(shù)據(jù)庫字符集和排序規(guī)則
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
## 查看某表字符集和序規(guī)則
SHOW CREATE TABLE `table_name`; # CHARSET 后面為字符集
SHOW TABLE STATUS LIKE 'table_name'; # Collation 列表示排序規(guī)則

五、查詢時(shí)如何強(qiáng)制區(qū)分大小寫

1. 強(qiáng)制方法

如遇到不支持區(qū)分大小寫的排序規(guī)則,可使用以下方法強(qiáng)制啟用:

(1)使用 COLLATE 指定區(qū)分大小寫的排序規(guī)則

SELECT * FROM table_name WHERE column_name COLLATE utf8mb4_bin = 'Value'; -- utf8mb4_bin 需適配字符集

(2)使用 BINARY 運(yùn)算符

SELECT * FROM table_name WHERE BINARY column_name = 'Value';

(3)使用 LIKE BINARY 語法

SELECT * FROM table_name WHERE column_name LIKE BINARY 'Value';

(4)使用區(qū)分大小寫的函數(shù)

SELECT * FROM table_name WHERE CAST(column_name AS BINARY) = CAST('Value' AS BINARY);

(5)修改列或表的字符集排序規(guī)則

-- 修改列的排序規(guī)則
ALTER TABLE table_name MODIFY column_name VARCHAR(255) COLLATE utf8mb4_bin;
-- 修改表的默認(rèn)排序規(guī)則
ALTER TABLE table_name COLLATE utf8mb4_bin;

2. 各方法對(duì)比

方法是否利用索引持久性字符集兼容性推薦場(chǎng)景缺點(diǎn)
使用 COLLATE 指定區(qū)分大小寫的排序規(guī)則? 是僅當(dāng)前查詢需匹配列字符集臨時(shí)區(qū)分大小寫查詢需顯式指定,字符集需一致
使用 BINARY 運(yùn)算符?? 部分場(chǎng)景僅當(dāng)前查詢任意字符集快速兼容性寫法某些版本無法利用索引
使用 LIKE BINARY 語法?? 部分場(chǎng)景僅當(dāng)前查詢任意字符集不推薦(語義混淆)性能差,模糊匹配語義不清晰
使用區(qū)分大小寫的函數(shù)?? 部分場(chǎng)景僅當(dāng)前查詢任意字符集極特殊場(chǎng)景性能最差,語法冗長
修改列或表的字符集排序規(guī)則? 是? 永久生效需匹配列字符集需要長期區(qū)分大小寫的字段修改表結(jié)構(gòu)可能鎖表

3. 使用建議

如僅當(dāng)前查詢需區(qū)分大小寫,建議使用 COLLATE 指定區(qū)分大小寫的排序規(guī)則;如需永久生效,建議修改列或表的字符集排序規(guī)則。

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

相關(guān)文章

  • Mysql中分布式鎖的具體實(shí)現(xiàn)

    Mysql中分布式鎖的具體實(shí)現(xiàn)

    分布式鎖開發(fā)中經(jīng)常使用,本文主要介紹了Mysql中分布式鎖的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • mysql誤刪root用戶恢復(fù)方法

    mysql誤刪root用戶恢復(fù)方法

    這篇文章主要介紹了mysql誤刪root用戶恢復(fù)方法,本文操作是在mysql5.5版本下完成,其它版本僅作參考,需要的朋友可以參考下
    2015-02-02
  • Mysql?exists用法小結(jié)

    Mysql?exists用法小結(jié)

    這篇文章主要介紹了Mysql?exists用法的的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • 使用python連接mysql數(shù)據(jù)庫之pymysql模塊的使用

    使用python連接mysql數(shù)據(jù)庫之pymysql模塊的使用

    這篇文章主要介紹了使用python連接mysql數(shù)據(jù)庫之pymysql模塊的使用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 詳解數(shù)據(jù)庫連接的URL的寫法及總結(jié)

    詳解數(shù)據(jù)庫連接的URL的寫法及總結(jié)

    這篇文章主要介紹了詳解數(shù)據(jù)庫連接的URL的寫法及總結(jié)的相關(guān)資料這里提供了四種方法1、oracle.2、MySQL.3、SQL Server.4、DB2,需要的朋友可以參考下
    2017-07-07
  • driver-class-name:?com.mysql.jdbc.Driver爆紅的問題解決

    driver-class-name:?com.mysql.jdbc.Driver爆紅的問題解決

    在springboot項(xiàng)目工程中想要進(jìn)行數(shù)據(jù)庫配置,driver-class-name:?com.mysql.cj.jdbc.Driver始終報(bào)錯(cuò),本文就來介紹一下如何解決,感興趣的可以了解一下
    2024-07-07
  • MySQL無法啟動(dòng)幾種常見問題小結(jié)

    MySQL無法啟動(dòng)幾種常見問題小結(jié)

    在群里看到有新同學(xué)還在問MySQL無法啟動(dòng)的問題,于是總結(jié)了幾個(gè)常見情況與解決方法,需要的朋友可以參考下
    2013-09-09
  • 數(shù)據(jù)庫sql語句優(yōu)化

    數(shù)據(jù)庫sql語句優(yōu)化

    今天小編就為大家分享一篇關(guān)于數(shù)據(jù)庫sql語句優(yōu)化,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • MySQL更新DATETIME/TIMESTAMP字段日期部分而保留時(shí)間部分的四種方法

    MySQL更新DATETIME/TIMESTAMP字段日期部分而保留時(shí)間部分的四種方法

    在 MySQL 中,若要更新 DATETIME 或 TIMESTAMP 字段的?日期部分?(年月日),同時(shí)保持?時(shí)間部分?(時(shí)分秒)不變,主要有以下幾種常用且高效的方法,需要的朋友可以參考下
    2026-06-06
  • MySQL關(guān)聯(lián)表插入數(shù)據(jù)方式(insert into select語法)

    MySQL關(guān)聯(lián)表插入數(shù)據(jù)方式(insert into select語法)

    這篇文章主要介紹了MySQL關(guān)聯(lián)表插入數(shù)據(jù)方式(insert into select語法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評(píng)論

宁城县| 沛县| 英超| 阜城县| 香河县| 龙南县| 临城县| 睢宁县| 弥勒县| 益阳市| 丰镇市| 武义县| 三台县| 弋阳县| 习水县| 襄汾县| 阳信县| 石台县| 乌苏市| 石家庄市| 凯里市| 隆化县| 同仁县| 新沂市| 威海市| 卢氏县| 余干县| 巴楚县| 云龙县| 梁河县| 柳河县| 九龙城区| 天镇县| 武山县| 黄龙县| 策勒县| 壤塘县| 绥宁县| 白城市| 鄂州市| 榆社县|