MySQL校對(duì)規(guī)則(COLLATION)的具體使用
簡(jiǎn)介
本文介紹MySQL的校對(duì)規(guī)則。
MySQL的校對(duì)規(guī)則
- 兩個(gè)不同的字符集不能有相同的校對(duì)規(guī)則。
- 每個(gè)字符集有一個(gè)默認(rèn)校對(duì)規(guī)則。例如:
- utf8mb4默認(rèn)校對(duì)規(guī)則:utf8mb4_general_ci。
- utf8默認(rèn)校對(duì)規(guī)則:utf8_general_ci。
- 存在校對(duì)規(guī)則命名約定:它們以其相關(guān)的字符集名開(kāi)始,通常包括一個(gè)語(yǔ)言名,并且以_ci(大小寫(xiě)不敏感)、_cs(大小寫(xiě)敏感)或_bin(二進(jìn)制,大小寫(xiě)敏感)結(jié)束。
校對(duì)規(guī)則列舉
- utf8mb4_general_ci
- utf8mb4_unicode_ci
- utf8mb4_general_cs
- utf8mb4_bin
//不存在utf8_unicode_cs
查看校對(duì)規(guī)則
查看支持的校驗(yàn)規(guī)則
mysql> SHOW COLLATION like 'utf8%'; +--------------------------+---------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------------+---------+-----+---------+----------+---------+ | utf8_general_ci | utf8 | 33 | Yes | Yes | 1 | | utf8_bin | utf8 | 83 | | Yes | 1 | | utf8_unicode_ci | utf8 | 192 | | Yes | 8 | ... | utf8mb4_general_ci | utf8mb4 | 45 | Yes | Yes | 1 | | utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 | | utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 8 | | utf8mb4_icelandic_ci | utf8mb4 | 225 | | Yes | 8 |
查看本地的校驗(yàn)規(guī)則
mysql> show global variables like '%coll%'; +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +----------------------+--------------------+
修改校對(duì)規(guī)則
修改數(shù)據(jù)庫(kù)配置后,不會(huì)對(duì)已經(jīng)存在的表造成影響,如要生效需要修改特定列的排序規(guī)則。優(yōu)先級(jí):列>表>數(shù)據(jù)庫(kù)>服務(wù)器。
對(duì)已存在的表修改
# 修改數(shù)據(jù)庫(kù): ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin; # 修改表: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; # 修改表字段: ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL ;
創(chuàng)建表時(shí)指定
CREATE TABLE `T` ( `name` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
utf8_general_ci 與 utf8_unicode_ci區(qū)別
項(xiàng) | utf8mb4_unicode_ci | utf8mb4_general_ci | 總結(jié) |
準(zhǔn)確性 | 基于標(biāo)準(zhǔn)的Unicode來(lái)排序和比較,能夠在各種語(yǔ)言之間精確排序 | 沒(méi)有實(shí)現(xiàn)Unicode排序規(guī)則,在遇到某些特殊語(yǔ)言或字符時(shí),排序結(jié)果可能不是所期望的。 | 絕大多數(shù)情況下,特殊字符的順序不需要那么精確。 |
性能 | 在特殊情況下,Unicode排序規(guī)則為了能夠處理特殊字符的情況,實(shí)現(xiàn)了略微復(fù)雜的排序算法。 | 在比較和排序的時(shí)候更快 | 絕大多數(shù)情況下,不會(huì)發(fā)生此類(lèi)復(fù)雜比較。 |
總結(jié):
utf8_unicode_ci比較準(zhǔn)確,utf8_general_ci速度比較快。
通常情況下 utf8_general_ci 的準(zhǔn)確性就夠我們用的了,在我看過(guò)很多程序源碼后,發(fā)現(xiàn)它們大多數(shù)也用的是utf8_general_ci,所以新建數(shù)據(jù) 庫(kù)時(shí)一般選用utf8_general_ci就可以了。
如果是utf8mb4那么對(duì)應(yīng)的就是 utf8mb4_general_ci utf8mb4_unicode_ci
到此這篇關(guān)于MySQL校對(duì)規(guī)則(COLLATION)的具體使用的文章就介紹到這了,更多相關(guān)MySQL 校對(duì)規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL的InnoDB引擎入門(mén)學(xué)習(xí)教程
這篇文章主要介紹了MySQL的InnoDB引擎入門(mén)學(xué)習(xí)教程,對(duì)InnoDB的存儲(chǔ)結(jié)構(gòu)有一個(gè)較好的總結(jié),需要的朋友可以參考下2015-11-11mysql 數(shù)據(jù)同步 出現(xiàn)Slave_IO_Running:No問(wèn)題的解決方法小結(jié)
mysql replication 中slave機(jī)器上有兩個(gè)關(guān)鍵的進(jìn)程,死一個(gè)都不行,一個(gè)是slave_sql_running,一個(gè)是Slave_IO_Running,一個(gè)負(fù)責(zé)與主機(jī)的io通信,一個(gè)負(fù)責(zé)自己的slave mysql進(jìn)程。2011-05-05MySql主從復(fù)制實(shí)現(xiàn)原理及配置
這篇文章主要介紹了MySql主從復(fù)制實(shí)現(xiàn)原理及配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11mysql8.0及以上my.cnf設(shè)置lower_case_table_names=1無(wú)法啟動(dòng)問(wèn)題
這篇文章主要介紹了mysql8.0及以上my.cnf設(shè)置lower_case_table_names=1無(wú)法啟動(dòng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11mysql將數(shù)據(jù)庫(kù)中所有表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到另一個(gè)庫(kù)的方法(親測(cè)有效)
這篇文章主要給大家介紹了關(guān)于mysql將數(shù)據(jù)庫(kù)中所有表結(jié)構(gòu)和數(shù)據(jù)導(dǎo)入到另一個(gè)庫(kù)的方法,文中通過(guò)代碼介紹的非常詳細(xì),親測(cè)有效,對(duì)同樣遇到這個(gè)需求的朋友具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01Mysql中Table ‘XXX’ is marked as crashed and last (automatic?)
這篇文章主要介紹了Mysql中Table ‘XXX’ is marked as crashed and last (automatic?)問(wèn)題解決方法,需要的朋友可以參考下2014-05-05淺談Mysql?tinyint(1)與tinyint(4)的區(qū)別
本文主要介紹了淺談Mysql?tinyint(1)與tinyint(4)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03