MySQL?中字符集詳細(xì)介紹
MySQL 中的 UTF8
在 MySQL 中, utf8 編碼格式有點(diǎn)特殊, 它不是我們通常用到的 utf8, 而是 utf8mb3 編碼的縮寫. 而 utf8mb4 才是我們常說的那個 utf8.
utf8mb3:閹割過的 utf8 字符集, 只使用 1~3 個字節(jié)表示字符.utf8mb4:正宗的 utf8 字符集, 使用 1~4 個字節(jié)表示字符.
通常情況下, utf8mb3 和 utf8mb4 的使用區(qū)別不大, 但是如果有使用 4 字節(jié)編碼一個字符的情況, 比如存儲一些 emoji 表情, 那就必須使用 utf8mb4 編碼.
修改MySQL數(shù)據(jù)庫的編碼
當(dāng)我們 MySQL 數(shù)據(jù)庫的編碼已經(jīng)是UTF8 時, 此時需要對某個表的某個字段支持插入emoji 表情,前面說過 emoji 表情需要 utf8mb4 才支持。所以此時就需要修改 MySQL 的編碼。
注意:utf8mb4 字符集要求 MySQL 數(shù)據(jù)庫版本 >=5.5.3。
修改的步驟如下:
1.修改 mysql 配置文件,設(shè)置其編碼格式,添加或修改如下代碼:
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET NAMES utf8mb4' character-set-client-handshake = false [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4
2.修改數(shù)據(jù)庫字符集編碼
-- 設(shè)置指定數(shù)據(jù)庫的字符集編碼,xxx 為數(shù)據(jù)庫名稱 ALTER DATABASE xxx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3.修改數(shù)據(jù)表字符集編碼
-- 設(shè)置指定數(shù)據(jù)表的字符集編碼 ALTER TABLE xxx.yyy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4.檢測是否修改成功
SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';
5.插入一個emoji表情來測試下:
UPDATE yyy SET comments = '測試表情??' WHERE id = 1;
字符集的比較規(guī)則
MySQL 有 4 個級別的字符集, 分別是: 服務(wù)器級別, 數(shù)據(jù)庫級別, 表級別, 列級別。同時對應(yīng)了4個級別的比較規(guī)則,即服務(wù)器級別, 數(shù)據(jù)庫級別, 表級別, 列級別。
每種字符集對應(yīng)若干種比較規(guī)則, 且每種字符集都有一種默認(rèn)的比較規(guī)則。
通過 SHOW COLLATION 命令的結(jié)果中的 Default 列的值為 YES 的就是該字符集的默認(rèn)比較規(guī)則, 對于 utf8 字符集,默認(rèn)的比較規(guī)則就是 utf8_general_ci. ( ci 表示不區(qū)分大小寫 )
- utf8_general_ci 表示不區(qū)分大小寫
- utf8_general_cs 表示區(qū)分大小寫
上面說到,一種字符集對應(yīng)多個比較規(guī)則,常見的比較規(guī)則 utf8_unicode_ci 和 utf8_general_ci 的區(qū)別:
- 對中英文來說沒有實(shí)質(zhì)的差別。
- utf8_general_ci: 校對速度快,但準(zhǔn)確度稍差。
- utf8_unicode_ci: 準(zhǔn)確度高,但校對速度稍慢。
- 若數(shù)據(jù)庫中有德語、法語或者俄語需求,需使用 utf8_unicode_ci。其他情況用 utf8_general_ci 即可。
MySQL查詢時區(qū)分大小寫
上面說到,MySQL 默認(rèn)是不區(qū)分大小寫的,平時也很少會考慮數(shù)據(jù)存儲時是否區(qū)分字符串的大小寫。不過,有時候還是會明確要求某張表的指定字段在查詢時需要區(qū)分大小寫。
那么如何實(shí)現(xiàn)呢?
- 方式1:在建表的時候,就設(shè)置比較規(guī)則區(qū)分大小寫。但個人認(rèn)為最好不要這么做。一般在設(shè)計(jì)數(shù)據(jù)庫時并不能很明確的知道哪個字段需要區(qū)分,都是在開發(fā)一段時間后,突然提出的。具有難以預(yù)料性。
- 方式2:是在執(zhí)行查詢 SQL 時添加關(guān)鍵字
binary可以區(qū)分大小寫。
-- 查詢結(jié)果是相同的,不分區(qū)大小寫 SELECT * FROM U WHERE name LIKE 'a%'; SELECT * FROM U WHERE name LIKE 'A%'; -- 查詢結(jié)果是不同的,區(qū)分大小寫 SELECT * FROM U WHERE binary name LIKE 'a%'; SELECT * FROM U WHERE binary name LIKE 'A%';
到此這篇關(guān)于MySQL 中字符集詳細(xì)介紹的文章就介紹到這了,更多相關(guān)MySQL 字符集內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL8 通過ibd文件恢復(fù)表數(shù)據(jù)的方法
這篇文章主要介紹了MYSQL8 通過ibd文件恢復(fù)表數(shù)據(jù)的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
Centos7下安裝和配置MySQL5.7.20的詳細(xì)教程
這篇文章主要介紹了Linux(CentOS7)下安裝和配置MySQL5.7.20詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價,需要的朋友可以參考下2020-05-05
在Windows環(huán)境下使用MySQL:實(shí)現(xiàn)自動定時備份
下面小編就為大家分享一篇在Windows環(huán)境下使用MySQL:實(shí)現(xiàn)自動定時備份的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
MySQL使用索引合并(Index?Merge)提高查詢效率
本文介紹了索引合并(Index?Merge)的實(shí)現(xiàn)原理、場景約束與通過案例驗(yàn)證的優(yōu)缺點(diǎn),在實(shí)際使用中,當(dāng)查詢條件列較多且無法使用聯(lián)合索引時,就可以考慮使用索引合并,利用多個索引加速查詢,但要注意,索引合并并非在任何場景下均具有較好的效果,需要結(jié)合具體情況選擇2024-07-07
MySQL query_cache_type 參數(shù)與使用詳解
這篇文章主要介紹了MySQL query_cache_type參數(shù)介紹,需要的朋友可以參考下2021-07-07
解析mysqldump的delay-insert選項(xiàng)
本篇文章是對mysqldump的delay-insert選項(xiàng)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

