MySQL校對規則(COLLATION)的具體使用
簡介
本文介紹MySQL的校對規則。
MySQL的校對規則
- 兩個不同的字符集不能有相同的校對規則。
- 每個字符集有一個默認校對規則。例如:
- utf8mb4默認校對規則:utf8mb4_general_ci。
- utf8默認校對規則:utf8_general_ci。
- 存在校對規則命名約定:它們以其相關的字符集名開始,通常包括一個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二進制,大小寫敏感)結束。
校對規則列舉
- utf8mb4_general_ci
- utf8mb4_unicode_ci
- utf8mb4_general_cs
- utf8mb4_bin
//不存在utf8_unicode_cs
查看校對規則
查看支持的校驗規則
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 |
查看本地的校驗規則
mysql> show global variables like '%coll%'; +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +----------------------+--------------------+
修改校對規則
修改數據庫配置後,不會對已經存在的表造成影響,如要生效需要修改特定列的排序規則。優先級:列>表>數據庫>服務器。
對已存在的表修改
# 修改數據庫: 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 ;
創建表時指定
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區別
項 | utf8mb4_unicode_ci | utf8mb4_general_ci | 總結 |
準確性 | 基於標準的Unicode來排序和比較,能夠在各種語言之間精確排序 | 沒有實現Unicode排序規則,在遇到某些特殊語言或字符時,排序結果可能不是所期望的。 | 絕大多數情況下,特殊字符的順序不需要那麼精確。 |
性能 | 在特殊情況下,Unicode排序規則為瞭能夠處理特殊字符的情況,實現瞭略微復雜的排序算法。 | 在比較和排序的時候更快 |
絕大多數情況下,不會發生此類復雜比較。 |
總結:
utf8_unicode_ci比較準確,utf8_general_ci速度比較快。
通常情況下 utf8_general_ci 的準確性就夠我們用的瞭,在我看過很多程序源碼後,發現它們大多數也用的是utf8_general_ci,所以新建數據 庫時一般選用utf8_general_ci就可以瞭。
如果是utf8mb4那麼對應的就是 utf8mb4_general_ci utf8mb4_unicode_ci
到此這篇關於MySQL校對規則(COLLATION)的具體使用的文章就介紹到這瞭,更多相關MySQL 校對規則內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!