柚子快報(bào)激活碼778899分享:Mysql的utf8mb4
1. utf8mb4_general_ci vs utf8mb4_bin 的具體區(qū)別
utf8mb4_general_ci 和 utf8mb4_bin 都是 utf8mb4 編碼的排序規(guī)則(collation),它們主要在 排序(ORDER BY) 和 比較(WHERE) 時(shí)的行為不同:
排序規(guī)則是否區(qū)分大小寫(xiě)是否區(qū)分重音速度適用場(chǎng)景utf8mb4_general_ci? 不區(qū)分? 不區(qū)分? 更快適用于一般文本,如用戶名、標(biāo)題utf8mb4_bin? 區(qū)分? 區(qū)分? 更慢適用于密碼、唯一標(biāo)識(shí)符
(1) utf8mb4_general_ci(Case-Insensitive,不區(qū)分大小寫(xiě))
CI 代表 “Case Insensitive”,表示比較時(shí) 不區(qū)分大小寫(xiě),也 不區(qū)分重音符號(hào)。例如:SELECT 'a' = 'A'; -- 結(jié)果是 TRUE
SELECT 'résumé' = 'resume'; -- 結(jié)果是 TRUE
utf8mb4_general_ci 主要適用于 對(duì)大小寫(xiě)或重音符號(hào)不敏感的文本(如用戶名、標(biāo)簽等)。
(2) utf8mb4_bin(Binary,區(qū)分大小寫(xiě))
utf8mb4_bin 按照 二進(jìn)制編碼 逐字節(jié)進(jìn)行比較,因此大小寫(xiě)、重音符號(hào)完全不同。例如:SELECT 'a' = 'A' COLLATE utf8mb4_bin; -- 結(jié)果是 FALSE
SELECT 'résumé' = 'resume' COLLATE utf8mb4_bin; -- 結(jié)果是 FALSE
utf8mb4_bin 適用于 嚴(yán)格區(qū)分大小寫(xiě)的場(chǎng)景(如密碼、文件名、唯一標(biāo)識(shí)符)。
2. 除了 utf8mb4_general_ci 和 utf8mb4_bin,還有哪些?
utf8mb4 編碼有多種排序規(guī)則,主要區(qū)別在于:
是否區(qū)分大小寫(xiě)是否區(qū)分重音排序算法
(1) 常見(jiàn)的 utf8mb4 排序規(guī)則
排序規(guī)則是否區(qū)分大小寫(xiě)是否區(qū)分重音適用場(chǎng)景utf8mb4_general_ci? 不區(qū)分? 不區(qū)分一般文本,如用戶名、標(biāo)題utf8mb4_general_cs? 區(qū)分? 不區(qū)分需要區(qū)分大小寫(xiě)但不區(qū)分重音的場(chǎng)景utf8mb4_unicode_ci? 不區(qū)分? 區(qū)分多語(yǔ)言支持,如 é ≠ eutf8mb4_unicode_cs? 區(qū)分? 區(qū)分多語(yǔ)言場(chǎng)景,嚴(yán)格匹配utf8mb4_bin? 區(qū)分? 區(qū)分密碼、唯一標(biāo)識(shí)符
(2) utf8mb4_general_ci vs utf8mb4_unicode_ci
特性u(píng)tf8mb4_general_ciutf8mb4_unicode_ci是否區(qū)分大小寫(xiě)? 不區(qū)分? 不區(qū)分是否區(qū)分重音? 不區(qū)分? 區(qū)分是否符合 Unicode 規(guī)則? 不完全符合? 符合 Unicode 排序規(guī)則速度? 快? 稍慢
utf8mb4_general_ci 適用于性能優(yōu)先的應(yīng)用,它的比較方式比較簡(jiǎn)單,不完全符合 Unicode 規(guī)則。utf8mb4_unicode_ci 適用于多語(yǔ)言支持,比如 德語(yǔ)的 ? 應(yīng)該等于 ss,但 utf8mb4_general_ci 可能不會(huì)正確處理。
3. 選擇排序規(guī)則的建議
大小寫(xiě)不敏感、不關(guān)注重音: utf8mb4_general_ci(性能更快)大小寫(xiě)不敏感、但區(qū)分重音: utf8mb4_unicode_ci(多語(yǔ)言支持更好)大小寫(xiě)敏感、但不區(qū)分重音: utf8mb4_general_cs大小寫(xiě)敏感、也區(qū)分重音: utf8mb4_unicode_cs嚴(yán)格區(qū)分大小寫(xiě)、適用于 ID/密碼等: utf8mb4_bin
5. 總結(jié)
utf8mb4_general_ci:不區(qū)分大小寫(xiě)、不區(qū)分重音,適用于一般文本。utf8mb4_bin:嚴(yán)格區(qū)分大小寫(xiě)和重音,適用于唯一標(biāo)識(shí)符(如密碼、UUID)。utf8mb4_unicode_ci:符合 Unicode 規(guī)則,適用于多語(yǔ)言支持。
適合用中文的是?
如果你的數(shù)據(jù)包含中文,建議使用 utf8mb4_unicode_ci 或 utf8mb4_unicode_520_ci,因?yàn)樗鼈兡軌蚋鼫?zhǔn)確地進(jìn)行排序和比較。下面是不同排序規(guī)則在處理中文時(shí)的特點(diǎn):
1. utf8mb4_general_ci vs. utf8mb4_unicode_ci 處理中文的區(qū)別
排序規(guī)則是否區(qū)分大小寫(xiě)是否區(qū)分重音是否適合中文排序規(guī)則準(zhǔn)確性u(píng)tf8mb4_general_ci? 不區(qū)分? 不區(qū)分?? 基本支持,但排序不準(zhǔn)確? 較差utf8mb4_unicode_ci? 不區(qū)分? 區(qū)分? 更適合中文,符合 Unicode 規(guī)范? 準(zhǔn)確utf8mb4_unicode_520_ci? 不區(qū)分? 區(qū)分? 最新 Unicode 規(guī)則,適合中文? 更準(zhǔn)確utf8mb4_bin? 區(qū)分? 區(qū)分? 不適合中文排序(僅適用于精確匹配,如密碼)? 排序無(wú)意義
2. 為什么 utf8mb4_general_ci 不適合中文?
utf8mb4_general_ci 主要是針對(duì)拉丁字符優(yōu)化,它對(duì)漢字的處理方式較為簡(jiǎn)單,可能會(huì)導(dǎo)致 排序不符合中文習(xí)慣,例如:
SELECT '中' > '啊' COLLATE utf8mb4_general_ci;
utf8mb4_general_ci 可能會(huì) 按照字符編碼順序 排序,而不是按拼音或部首排序,這樣會(huì)出現(xiàn) “中” 排在 “啊” 之前,這并不符合常見(jiàn)的中文排序規(guī)則。
3. utf8mb4_unicode_ci 更適合中文
utf8mb4_unicode_ci 遵循 Unicode 標(biāo)準(zhǔn),能夠正確地比較和排序 漢字、拼音、部首,在處理中文時(shí)比 utf8mb4_general_ci 更準(zhǔn)確。例如:SELECT '中' > '啊' COLLATE utf8mb4_unicode_ci;
在 utf8mb4_unicode_ci 規(guī)則下,“啊” 會(huì)排在 “中” 之前,符合拼音排序規(guī)則(A 在 Z 之前)。
4. utf8mb4_unicode_520_ci 適用于最新 Unicode 標(biāo)準(zhǔn)
utf8mb4_unicode_520_ci 是 Unicode 5.2 版本的排序規(guī)則,它在 utf8mb4_unicode_ci 的基礎(chǔ)上 進(jìn)一步優(yōu)化了字符排序,對(duì)于現(xiàn)代 Unicode 處理更完善。例如:SELECT '?' > '中' COLLATE utf8mb4_unicode_520_ci;
在 utf8mb4_unicode_520_ci 下,可以正確處理擴(kuò)展?jié)h字,避免某些生僻字排序錯(cuò)誤。
5. 選擇適合中文的排序規(guī)則
適用場(chǎng)景推薦排序規(guī)則普通中文文本(適用于大多數(shù)情況)utf8mb4_unicode_ci最新 Unicode 規(guī)則(支持?jǐn)U展?jié)h字)utf8mb4_unicode_520_ci大小寫(xiě)敏感,適用于特定情況utf8mb4_unicode_cs嚴(yán)格區(qū)分大小寫(xiě)和重音(如密碼存儲(chǔ))utf8mb4_bin
6. 結(jié)論
? 如果你存儲(chǔ)中文,并且希望排序、比較符合 Unicode 規(guī)范,推薦:
utf8mb4_unicode_ci
? 如果你希望使用最新 Unicode 5.2 標(biāo)準(zhǔn),并支持更多生僻字,推薦:
utf8mb4_unicode_520_ci
?? 避免 utf8mb4_general_ci,因?yàn)樗贿m用于中文排序 ?
utf8mb4_unicode_520_ci 是mysql5.7 有嗎?
? utf8mb4_unicode_520_ci 在 MySQL 5.7 是支持的!
1. utf8mb4_unicode_520_ci 在 MySQL 版本的支持情況
排序規(guī)則MySQL 5.5MySQL 5.6MySQL 5.7MySQL 8.0utf8mb4_general_ci? 支持? 支持? 支持? 支持utf8mb4_unicode_ci? 支持? 支持? 支持? 支持utf8mb4_unicode_520_ci? 不支持? 不支持? 支持? 支持
MySQL 5.7 引入了 utf8mb4_unicode_520_ci,它基于 Unicode 5.2 標(biāo)準(zhǔn),相比 utf8mb4_unicode_ci(基于 Unicode 4.0),提供了更準(zhǔn)確的字符排序,尤其是對(duì)于 擴(kuò)展?jié)h字、emoji、某些特殊符號(hào)。
2. 如何在 MySQL 5.7 檢查 utf8mb4_unicode_520_ci 是否可用?
運(yùn)行以下 SQL 語(yǔ)句:
SHOW COLLATION WHERE Collation LIKE 'utf8mb4_unicode_520_ci';
如果返回結(jié)果,說(shuō)明 MySQL 5.7 支持該排序規(guī)則 ?。
如果沒(méi)有結(jié)果,可能是 MySQL 版本較低(如 5.6 或 5.5),可以運(yùn)行:
SELECT VERSION();
檢查 MySQL 版本。
3. 在 MySQL 5.7 中使用 utf8mb4_unicode_520_ci
創(chuàng)建表
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) COLLATE utf8mb4_unicode_520_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
修改表的排序規(guī)則
ALTER TABLE test_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
修改數(shù)據(jù)庫(kù)默認(rèn)排序規(guī)則
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
4. utf8mb4_unicode_520_ci vs utf8mb4_unicode_ci
規(guī)則utf8mb4_unicode_ciutf8mb4_unicode_520_ciUnicode 版本Unicode 4.0Unicode 5.2生僻字 & emoji 處理? 可能不準(zhǔn)確? 更準(zhǔn)確法語(yǔ)、德語(yǔ)等特殊字符排序? 不完整? 更符合規(guī)范擴(kuò)展?jié)h字 & 拼音排序? 較好? 更好
5. 結(jié)論
? MySQL 5.7 支持 utf8mb4_unicode_520_ci,適用于 更準(zhǔn)確的中文排序 ? 如果是 MySQL 5.6 或更早版本,utf8mb4_unicode_520_ci 不可用,可以用 utf8mb4_unicode_ci 代替
柚子快報(bào)激活碼778899分享:Mysql的utf8mb4
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。