時間:2022-12-10來源:www.djmaza-info.com作者:電腦系統城
我們在使用mysql的時候,尤其是在創建數據庫的時候,我們需要選擇當前數據庫的字符集和排序規則,這樣你庫里面的創建數據表的時候默認的編碼方式就是庫選擇好的。
我們這里舊按照navicat創建數據庫的來說。(主要講述中國的使用習慣)
由于漢字的特殊性,數量多等原因,我們一般在寫代碼或者寫其它文檔的時候都是選擇***UTF-8***的編碼方式,所以我們創建數據庫的時候一般是選擇UTF-8.但是我們可以看到數據床架的時候,字符集的選擇有:utf8 以及 utf8mb4 這兩種方式。
那么兩種因該是選擇哪一種呢,下面稍后看我給你吹(一般是utf8mb4)。
字符集選擇結束之后我們還需要選擇這個排序規則,我們都知道字符集是保存數據時候需要的編碼方式,那么這個排序規則是干什么用的呢?
是指對指定字符集下不同字符的比較規則。其特征有以下幾點
那么排序的規則應該怎么選擇,也看下面我給你吹。
概述中我們已經說了,在中國一般使用的編碼方式大部分都是UTF-8,但是mysql的數據庫中給出了兩種選“utf8”,一個是“utf8mb4”。
根據查詢資料得知mysql的“utf8”并不是我們常見到的UTF-8,反而“utf8mb4”是我們常用的UTF-8。
為什么會這樣呢?
根據查詢得知MYSQL中的“utf8”編碼只支持每個字符最大3個字節的編碼方式,而我們通常使用的UTF-8是每個字符最大4個字節的編碼方式。
這個問題在我們中國看來就是一個bug,但是MYSQL并沒有對這個bug進行修復,而是在2010年增加了一個新的字符集“utf8mb4”,這個才對應了我們常使用的UTF-8。
所以在我們這邊,尤其是存儲漢字的時候,需要使用的編碼方式是“utf8mb4”。
1 2 3 4 |
#查詢utf8和utf8mb4長度信息 SHOW CHARSET LIKE 'utf8%' ; # 修改表的字符集 ALTER TABLE dm_user CONVERT TO CHARACTER SET utf8mb4; |
編碼規則我就按照字符集是“utf8mb4”的繼續說明,我們要說的字符集主要就三個:
utf8mb4_bin
utf8mb4_general_ci
utf8mb4_unicode_ci
bin的意思就是二進制的意思,也就是說排序查找的規則是按照二進制的方式進行查找的,這里就會涉及到我們常常說到的數據庫里面的大小寫區分。
比如說:
那么我們在執行
1 2 |
SELECT * FROM dm_user WHERE username= 'a' ; SELECT * FROM dm_user WHERE username= 'A' ; |
這兩條sql語句的結果是不一樣的,因為a和A的二進制編碼是不一樣的。
首先要說明的是,這兩種排序規則都是不區分大小寫的,也就是說在這兩種排序規則下,a和A是一樣的。
根據資料了解,這兩種排序規則要從兩個方面來看,一個是準確性,一個是性能。兩種排序規則的說明鏈接
準確性
utf8mb4_unicode_ci使用unicode規則進行排序和比較,它使用相當復雜的算法在各種語言中以及在使用各種特殊字符時進行正確排序。
這些規則需要考慮到特定語言的約定,并不是每個人都按照我們所說的“字母順序”對字符進行排序。就拉丁語(即“歐洲”)而言,MySQL中的Unicode排序和簡化的utf8mb4_general_ci排序沒有太大區別,但仍有一些區別:
例如:Unicode排序規則按使用這些字符的人通常希望的方式將“ß”排序為“ss”,將“Œ”排序為“OE”,而utf8mb4_general_ci將它們排序為單個字符(可能分別類似于“s”和“e”)。
一些Unicode字符被定義為可忽略字符,這意味著它們不應計入排序順序,而應將比較移到下一個字符。utf8mb4_unicode_ci可以正確處理這些問題。在非拉丁語言(如亞洲語言或不同字母表的語言)中,Unicode排序和簡化的utf8mb4_ci排序之間可能有更多的差異。utf8mb4_-general_ci的適用性將在很大程度上取決于所使用的語言。對某些語言來說,這是相當不夠的。
性能
以前我們使用general方式的排序,是受限于cpu的速度,所以使用更快的排序規則,但是就目前的服務器而言,cpu的速度已經可以忽略這兩種排序規則的速度差異了,所以個人也認為unicode規則會更好一點
2022-12-10
MySQL8.0.28數據庫安裝和主從配置說明2022-12-06
MySQL權限控制和用戶與角色管理實例分析講解2022-12-06
Mysql多表操作方法講解教程數據準備 簡單查詢 運算符 條件查詢 排序查詢 聚合查詢 null值的處理 分組查詢 分頁查詢 insert into select語句...
2022-12-06
1.索引的本質 2.索引的使用 2.1查看索引 2.2創建索引 2.3刪除索引 3.索引的數據結構 3.1B樹 3.2B+樹 4.事務 4.1事物的回滾(rollback) 4.2事務的四大特性(ACID) 4.2.1 原子性 4.2.2 一致性 4.2.3 持久性 4.2.4 隔離性...
2022-12-06