MySQL新建資料庫 字符集 排序規則

2021-10-06 13:45:03 字數 2108 閱讀 1165

排序規則

亂序問題

有過新建過的資料庫的小夥伴對這張圖肯定不陌生了,但關於字符集和排序規則一般是直接忽略呢,還是有去了解,然後根據自身業務特點設定相應字符集或者排序規則?

以上圖為例子,我是基於mysql8.0新建對的,然後字符集和排序規則都不設定,新建後,你會發現mysql預設設定為如下值:

字符集 :utf8mb4

排序規則:utf8mb4_0900_ai_ci

default charset=utf8mb4 collate=utf8mb4_0900_ai_ci;
以utf8為例,它最多支援 3 個位元組,當你存4位元組的 utf8 編碼字元時,會入庫失敗(常見的如:emoji ),在2023年重新發布了 utf8mb4 支援utf8。

使用如下指令可以檢視mysql支援的其他字符集及每個字符集對應的預設的排序集合。

關於排序規則命名,通常都是在相應的字符集後面加上下劃線_排序方式,常見的有如下三種方式:ci結尾表示大小寫不敏感(case insensitive),這點也是程式往往容易忽略的乙個bug,大部分場景下,特別是模糊搜尋時,我們可能更希望搜尋a時,a和a都會出現,但有些特殊情況,我們只希望出現a,而這時如果程式中沒有做特殊處理,你查出來相當於有多條資料,卻只對映到乙個物件時,此時程式會丟擲異常又或者查出了多條資料,當你程式沒有特殊處理,只預設處理第一條此時會出現不該出現的資料展現了出來。

cs表示大小寫敏感(case sensitive)

bin表示字串每個字串用二進位制資料編譯儲存,區分大小寫,而且可以存二進位制的內容。

關於mysql亂序問題,在初學時真的有點頭疼,有時你會發現,照著別人的文章,一毛一樣的設定,結果文章可以成功,而你的卻不行。(這時脾氣火爆的小哥哥小姐姐可能就直介面吐芬芳了)還有一種情況,你嘗試某個方法成功後,下次遇到時,再進行一毛一樣的操作,你會發現這次不靈了。

亂序問題除了我們程式的編碼問題外,mysql裡頭也有好幾個地方涉及到字符集的操作:

character_set_server:mysql server(服務端)預設字符集,可以用如下命令檢視:

show variables like 'character_set_server'
character_set_database:資料庫預設字符集。

show variables like 'character_set_database'
character_set_client:客戶端傳送的查詢使用的字符集。

show variables like 'character_set_client'
character_set_connection:mysql server接收客戶端發布的查詢請求後,將其轉換為character_set_connection變數指定的字符集。

show variables like 'character_set_connection'
character_set_results:mysql server把結果集和錯誤資訊轉換為character_set_results指定的字符集,並傳送給客戶端。

show variables like 'character_set_results'
character_set_system:系統元資料(欄位名等)字符集

show variables like 'character_set_system'
上述的某個階段和其他階段設定的字符集和不一致的時候,都可能出現亂序現象。

Mysql新建資料庫字符集及排序規則說明

1.字符集說明 一般選擇utf8.下面介紹一下utf8與utfmb4的區別。utf8mb4相容utf8,且比utf8能表示更多的字元。unicode編碼區從1 126就屬於傳統utf8區,當然utf8mb4也相容這個區,126行以上就是utf8mb4擴充區,當你需要存貯這些字元,你才用utf8mb4...

MySql 資料庫 新建 字符集與字元校對設定

10.1.常規字符集和校對 10.2.mysql中的字符集和校對 10.3.確定預設字符集和校對 10.3.1.伺服器字符集和校對 10.3.2.資料庫字符集和校對 10.3.3.表字符集和校對 10.3.4.列字符集和校對 10.3.5.字符集和校對分配示例 10.3.6.連線字符集和校對 10....

修改mysql資料庫字符集

首先修改預設建立資料庫字符集 c program files mysql mysql server 5.0資料夾下,找到my.ini檔案 default character set latin1 改為default character set 你想設定的字符集 之後重啟mysql,建立即可 如果想修...