中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql字符集和比較規則

發布時間:2021-06-26 14:15:30 來源:億速云 閱讀:178 作者:chen 欄目:大數據

這篇文章主要講解了“Mysql字符集和比較規則”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Mysql字符集和比較規則”吧!

一、前言

字符集表示的是存儲的二進制與字符如何映射的關系,比較規則指的是字符如何排序的規則,比如字符如果使用order by到底按什么規則進行排序。

二、查看命令

查看支持的字符集命令是:SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式],CHARACTER SET|CHARSET同意,兩者都可以用。

查看支持的比較規則命令是:SHOW COLLATION [LIKE 匹配的模式]

注意,比較規則的命名方式有一定規律,一般來說,滿足:

  • 比較規則名稱以與其關聯的字符集的名稱開頭

  • 后邊緊跟著該比較規則主要作用于哪種語言,比如utf8_polish_ci表示以波蘭語的規則比較,utf8_spanish_ci是以西班牙語的規則比較,utf8_general_ci是一種通用的比較規則。

  • 名稱后綴意味著該比較規則是否區分語言中的重音、大小寫啥的,具體可以用的值如下:

    后綴英文釋義描述
    _aiaccent insensitive不區分重音
    _asaccent sensitive區分重音
    _cicase insensitive不區分大小寫
    _cscase sensitive區分大小寫
    _binbinary以二進制方式比較

比如我們常用的utf8_general_ci這個比較規則是以ci結尾的,說明不區分大小寫進行比較。

三、關于utf8與utfmb4

utf8和utfmb4是我們常用的字符集,這兩者有什么區別勒?實際上真正的UTF-8 是1-4個字節,但是mysql里面的utf8不是指的這個,而是指的utf8mb3,其中mb表示的是最多占用多少個字節,mysql最開始為了節省空間資源偷偷把utf-8給閹割了,用1-3個字節表示,實際上1-3個字節也足夠表示我們平常使用的字符了。而實際上utfmb4才是真正的utf8,能映射所有的unicode碼。

四、字符集和比較規則的級別

MySQL有4個級別的字符集和比較規則,包括服務器級別、數據庫級別、表級別、列級別,對于一個表的列,這幾個級別粒度越具體的越優先使用,在創建數據庫、表、列的時候,如果沒有具體指定用什么字符集和比較規則,自動引用上一級別的配置。我們接下來看看各個級別的字符集和比較規則具體怎么設置。

服務器級別

系統變量描述
character_set_server服務器級別的字符集
collation_server服務器級別的比較規則

如圖,服務器級別的字符集和比較規則由系統變量character_set_server和collation_server控制,查看和修改命令上一篇文章介紹過。我們可以通過啟動選項、配置文件、運行時更改來設置它。

數據庫級別

數據庫級別的字符集和比較規則的系統變量為:

系統變量描述
character_set_database當前數據庫的字符集
collation_database當前數據庫的比較規則

如果想查看當前數據庫使用的字符集和比較規則,可以使用以上的變量值進行查看(前提是使用USE語句選擇當前默認數據庫,如果沒有默認數據庫,則變量與相應的服務器級系統變量具有相同的值)。

另外,這兩個變量是只讀的,我們不能直接修改這兩個值就把數據庫的字符集和比較規則改變了。這兩個值只能通過DDL語句去改變。語法格式為:

CREATE DATABASE 數據庫名
    [[DEFAULT] CHARACTER SET 字符集名稱]
    [[DEFAULT] COLLATE 比較規則名稱];

ALTER DATABASE 數據庫名
    [[DEFAULT] CHARACTER SET 字符集名稱]
    [[DEFAULT] COLLATE 比較規則名稱];

表級別

編輯和修改:

`` CREATE TABLE 表名 (列的信息) [[DEFAULT] CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱]]

ALTER TABLE 表名 [[DEFAULT] CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱] ``

列級別

編輯和修改:

CREATE TABLE 表名(
    列名 字符串類型 [CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱],
    其他列...
);

ALTER TABLE 表名 MODIFY 列名 字符串類型 [CHARACTER SET 字符集名稱] [COLLATE 比較規則名稱];

另外

由于字符集和比較規則是互相有聯系的,如果我們只修改字符集,則比較規則將變為修改后的字符集默認的比較規則。,只修改比較規則,則字符集將變為修改后的比較規則對應的字符集。

五、Mysql中字符集的轉換

我們知道從客戶端發往服務器的請求本質上就是一個字符串,服務器向客戶端返回的結果本質上也是一個字符串,而字符串其實是使用某種字符集編碼的二進制數據。這個字符串可不是使用一種字符集的編碼方式一條道走到黑的,從發送請求到返回結果這個過程中伴隨著多次字符集的轉換,在這個過程中會用到3個系統變量:

系統變量描述
character_set_client服務器解碼請求時使用的字符集
character_set_connection服務器處理請求時會把請求字符串從character_set_client轉為character_set_connection
character_set_results服務器向客戶端返回數據時使用的字符集

Mysql字符集和比較規則

多次轉碼流程如上圖,注意,如果某個列使用的字符集和character_set_connection代表的字符集不一致的話,還需要進行一次字符集轉換。一般情況下要使用保持這三個變量的值和客戶端使用的字符集相同,免得不必要的編解碼開銷。

感謝各位的閱讀,以上就是“Mysql字符集和比較規則”的內容了,經過本文的學習后,相信大家對Mysql字符集和比較規則這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

志丹县| 荔波县| 团风县| 象山县| 北京市| 车险| 赣州市| 分宜县| 南雄市| 宁阳县| 桦南县| 蒙山县| 新巴尔虎左旗| 宁安市| 桃源县| 临夏县| 尤溪县| 岳西县| 六枝特区| 凌云县| 广宁县| 富宁县| 天台县| 交口县| 股票| 华池县| 资中县| 开远市| 洛宁县| 临武县| 望都县| 乌拉特后旗| 长宁区| 尖扎县| 浪卡子县| 日喀则市| 黄梅县| 湾仔区| 高台县| 兖州市| 长春市|