字符集與校對集

2022-04-02 17:45:12 字數 4509 閱讀 6246

字符集

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 ...