字符集
show character set可檢視可用字符集(將一系列字元的編碼規則組合起來就形成字符集)
顯示了字符集名稱,描述資訊,預設校對集(default collation)和單字元的最大長度(maxlen)
下表展示了可用字符集的部分。
常用字符集有latinl,gbk,utf8
字符集 單字元最大長度 支援的語言
latinl 1位元組 西歐字元,希臘字元等
gbk 2位元組 簡體和正體中文,日文,韓文
utf8 3位元組 世界上大部分國家的文字
單字元占用的儲存空間越多,所支援的語言越多
標準的utf-8(rfc 3629)規定乙個字元最多使用4個位元組
mysql從5.5.3版本開始新增了utf8mb4,將乙個字元擴充套件到4個位元組。
考慮rfc 3629規範,應使用utf8mb4
校對集show collation
mysql中提供了很多校對集,用於為不同字符集指定比較和排序規則。
latinl 字符集預設校對集為latinnl_swedish_ci
校對集用 _ 分隔3部分。第乙個部分是對應的字符集,第二部分是國家名,結尾是ci,cs,或bin。其中ci表示不區分大小寫,cs表示區分大小寫,bin表示二進位制方式比較
通過show collation 可以檢視mysql可用的校對集。
下圖顯示了一部分的展示結果。
顯示了校對名稱(collation) 對應字符集(charset) 校對集(id) 是否對應字符集的預設校對集(default) 是否已編譯(compiled)以及排序的記憶體需求量(sortlen)
字符集與校對集的設定
show variables like 'character%' 檢視與字符集相關的變數,查詢結果如下
character_set_client utf8客戶端字符集
character_set_connection utf8客戶端與伺服器連線使用字符集
character_set_database
utf8預設資料庫使用的字符集(mysql5.7.6後不推薦)
character_set_filesystem binary檔案系統字符集
character_set_results
utf8將查詢的結果(錯誤資訊或結果集)返回客服端字符集
character_set_server
utf8伺服器預設字符集
character_set_system
utf8伺服器用來儲存識別符號的字符集
character_sets_dirh:\wamp\bin\mysql\mysql5.7.21\share\charsets\
安裝字符集目錄
character_set_server決定了新建立的資料庫預設使用的字符集。需要注意的是,資料庫的字符集決定了資料表的預設字符集,資料表的預設字符集決定了字元的預設字符集。character_set_server的值預設為latinl(所以我們建立庫的時候要注意了)
character_set_client
character_set_connection 和 character_set_results分別對應客戶端,連線層和查詢結果的字符集
。通常情況下這三個變數的值是相同的,具體值由客戶端的編碼而定,從而使客戶端輸入的字元和查詢的結果多不會出現亂碼。
通過「set 變數名
= 值」的命令可以更改變數的值。
set character_set_client = gbk;
set character_set_connection = gbk;
set character_set_result = gbk;
由於上面命令輸入太麻煩,可以通過
「set name 字符集」
一次性修改3個變數的值。如:
set names gbk 直接將客戶端字符集,客戶端與伺服器連線字符集,查詢結果字符集改成gbk
注意事項
1.set 或 set name修改字符集只對當前會話有效,不影響其他會話,且會話結束後,下次會話(如若不更改)仍然使用預設值。
2.character_set__connection character_set_database
和 character_set_server 對應的校對集分別通過變數colllation_connection collation_database
character_server來指定。
通過show variables like 'collation_%' 可檢視與校對集相關的變數
3.若欄位使用utf8字符集,而客戶端使用gbk字符集,mysql會自動進行編碼轉換。
由於gbk和utf8本質上是不同的字符集,雖然大部分常見的字元可以轉換成功,但若遇到其中乙個字符集中沒有的特殊字元,則可能出出現亂碼。
總結
show character set檢視字符集
show variables like 'character%' 檢視與字符集相關的變數
show
engines;檢視引擎
show collation檢視校對集
show variables like 'collation_%' 檢視與校對集相關的變數
set names gbk直接將客戶端字符集(character_set_client),客戶端與伺服器連線字符集(character_set_connection),查詢結果字符集(character_set_results)改成gbk
//使用場景
1.資料庫(character set + 指定字符集 collate
+ 指定校對集)
//若僅僅指定字符集,表示使用該字符集預設校對集
//若僅僅指定校對集,表示使用該校對集對應的字符集
#建立資料庫,指定字符集為utf8,預設校對集為utf_general_ci
create database pittle character set utf8
#建立資料庫,指定字符集為utf8,校對集為utf8_bin
create database pittle character character
set utf8 collate utf8_bin
2.資料表(若沒有為資料表指定字符集,則自動使用資料庫字符集)
create table pittle.user( …… )character set
utf8 collate utf8_bin;
指定資料表的字符集為utf8,校對集為utf8_bin
在mysql中還可以將character set簡寫為 charset
create table pittle.user( …… )default
charset=utf8; //字符集為utf8預設校對集
表示pittle下面的user表
3.欄位(若沒有為資料表指定字符集與校對,則自動使用資料表字符集和校對)
create table pittle(
username
varchar(20) character set uft8 collate utf8_bin
mysql 字符集與校對集
字符集與校對集 mysql的字符集設定非常靈活 可以設定伺服器預設字符集 資料庫預設字符集 表預設字符集 列字符集 如果某乙個級別沒有指定字符集,則繼承上一級 以表宣告utf8為例,儲存的資料在表中,最終是utf8 1.告訴伺服器,我給你傳送的資料是什麼編碼?set characer set cli...
MYSQL字符集與校對規則
一.字符集與校隊規則概述 簡單的說字符集就是一套文字元號及編碼 比較規則的集合。目前支援中文的常用的字符集有utf 8 gbk gb2312等,mysql伺服器支援多種字符集,在同一臺伺服器 同乙個資料庫或者同乙個資料表中的不同欄位都可以使用不同的字符集 mysql的字符集包括字符集 charact...
MySQL之字符集及校對集
本篇對資料庫使用時的字符集及校對集進行總結 1 資料庫字符集 字符集是各種文字和符號在計算機中的總稱 charset character set。2 mysql字符集 檢視mysql支援的所有字符集 show charset 3 亂碼問題 mysql客戶端 cmd開啟 字符集是固定的gbk set ...