MySQL?中字符集詳細(xì)介紹
MySQL 中的 UTF8
在 MySQL 中, utf8 編碼格式有點(diǎn)特殊, 它不是我們通常用到的 utf8, 而是 utf8mb3 編碼的縮寫(xiě). 而 utf8mb4 才是我們常說(shuō)的那個(gè) utf8.
utf8mb3
:閹割過(guò)的 utf8 字符集, 只使用 1~3 個(gè)字節(jié)表示字符.utf8mb4
:正宗的 utf8 字符集, 使用 1~4 個(gè)字節(jié)表示字符.
通常情況下, utf8mb3 和 utf8mb4 的使用區(qū)別不大, 但是如果有使用 4 字節(jié)編碼一個(gè)字符的情況, 比如存儲(chǔ)一些 emoji 表情
, 那就必須使用 utf8mb4 編碼.
修改MySQL數(shù)據(jù)庫(kù)的編碼
當(dāng)我們 MySQL 數(shù)據(jù)庫(kù)的編碼已經(jīng)是UTF8 時(shí), 此時(shí)需要對(duì)某個(gè)表的某個(gè)字段支持插入emoji 表情,前面說(shuō)過(guò) emoji 表情需要 utf8mb4 才支持。所以此時(shí)就需要修改 MySQL 的編碼。
注意:utf8mb4 字符集要求 MySQL 數(shù)據(jù)庫(kù)版本 >=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ù)庫(kù)字符集編碼
-- 設(shè)置指定數(shù)據(jù)庫(kù)的字符集編碼,xxx 為數(shù)據(jù)庫(kù)名稱(chēng) 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.檢測(cè)是否修改成功
SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';
5.插入一個(gè)emoji表情來(lái)測(cè)試下:
UPDATE yyy SET comments = '測(cè)試表情??' WHERE id = 1;
字符集的比較規(guī)則
MySQL 有 4 個(gè)級(jí)別的字符集, 分別是: 服務(wù)器級(jí)別, 數(shù)據(jù)庫(kù)級(jí)別, 表級(jí)別, 列級(jí)別。同時(shí)對(duì)應(yīng)了4個(gè)級(jí)別的比較規(guī)則,即服務(wù)器級(jí)別, 數(shù)據(jù)庫(kù)級(jí)別, 表級(jí)別, 列級(jí)別。
每種字符集對(duì)應(yīng)若干種比較規(guī)則, 且每種字符集都有一種默認(rèn)的比較規(guī)則。
通過(guò) SHOW COLLATION 命令的結(jié)果中的 Default 列的值為 YES 的就是該字符集的默認(rèn)比較規(guī)則, 對(duì)于 utf8 字符集,默認(rèn)的比較規(guī)則就是 utf8_general_ci. ( ci 表示不區(qū)分大小寫(xiě) )
- utf8_general_ci 表示不區(qū)分大小寫(xiě)
- utf8_general_cs 表示區(qū)分大小寫(xiě)
上面說(shuō)到,一種字符集對(duì)應(yīng)多個(gè)比較規(guī)則,常見(jiàn)的比較規(guī)則 utf8_unicode_ci 和 utf8_general_ci 的區(qū)別:
- 對(duì)中英文來(lái)說(shuō)沒(méi)有實(shí)質(zhì)的差別。
- utf8_general_ci: 校對(duì)速度快,但準(zhǔn)確度稍差。
- utf8_unicode_ci: 準(zhǔn)確度高,但校對(duì)速度稍慢。
- 若數(shù)據(jù)庫(kù)中有德語(yǔ)、法語(yǔ)或者俄語(yǔ)需求,需使用 utf8_unicode_ci。其他情況用 utf8_general_ci 即可。
MySQL查詢(xún)時(shí)區(qū)分大小寫(xiě)
上面說(shuō)到,MySQL 默認(rèn)是不區(qū)分大小寫(xiě)的
,平時(shí)也很少會(huì)考慮數(shù)據(jù)存儲(chǔ)時(shí)是否區(qū)分字符串的大小寫(xiě)。不過(guò),有時(shí)候還是會(huì)明確要求某張表的指定字段在查詢(xún)時(shí)需要區(qū)分大小寫(xiě)。
那么如何實(shí)現(xiàn)呢?
- 方式1:在建表的時(shí)候,就設(shè)置比較規(guī)則區(qū)分大小寫(xiě)。但個(gè)人認(rèn)為最好不要這么做。一般在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)并不能很明確的知道哪個(gè)字段需要區(qū)分,都是在開(kāi)發(fā)一段時(shí)間后,突然提出的。具有難以預(yù)料性。
- 方式2:是在執(zhí)行查詢(xún) SQL 時(shí)添加關(guān)鍵字
binary
可以區(qū)分大小寫(xiě)。
-- 查詢(xún)結(jié)果是相同的,不分區(qū)大小寫(xiě) SELECT * FROM U WHERE name LIKE 'a%'; SELECT * FROM U WHERE name LIKE 'A%'; -- 查詢(xún)結(jié)果是不同的,區(qū)分大小寫(xiě) 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份
這篇文章主要介紹了Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09修改mysql默認(rèn)字符集的兩種方法詳細(xì)解析
下面小編就為大家介紹兩種修改mysql默認(rèn)字符集的方法。需要的朋友可以過(guò)來(lái)參考下2013-08-08一文理解MySQL數(shù)據(jù)庫(kù)的約束與表的設(shè)計(jì)
約束是用來(lái)限制表中的數(shù)據(jù)長(zhǎng)什么樣子的,即什么樣的數(shù)據(jù)可以插入到表中,什么樣的數(shù)據(jù)插入不到表中,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)一文理解MySQL數(shù)據(jù)庫(kù)的約束與表的設(shè)計(jì)的相關(guān)資料,需要的朋友可以參考下2022-11-11淺析MYSQL REPEATABLE-READ隔離級(jí)別
REPEATABLE-READ 即可重復(fù)讀,autocommit= 0或者START TRANSACTION狀態(tài)下select表的內(nèi)容不會(huì)改變2014-07-07MYSQL中varchar和TEXT的相關(guān)問(wèn)題詳析
varchar 和 text 是 MySQL 字符存儲(chǔ)爭(zhēng)議比較多的領(lǐng)域,下面這篇文章主要給大家介紹了關(guān)于MYSQL中varchar和TEXT,文中介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Workbench連接不上阿里云服務(wù)器Ubuntu的Mysql解決方法(已測(cè))
這兩天為了解決workbench連接不上阿里云服務(wù)器的問(wèn)題,搞得頭大,網(wǎng)上搜到的教程都大同小異,但唯獨(dú)到我這就是行不通。不過(guò)好在最后終于解決了,記錄一下這個(gè)坑爹的過(guò)程,另外腳本之家小編特把這些問(wèn)題整理了一下,看完這一篇文章基本上就解決了2020-02-02