MYSQL字符集與校對規則

2021-08-02 03:07:21 字數 3600 閱讀 3184

一. 字符集與校隊規則概述

簡單的說字符集就是一套文字元號及編碼、比較規則的集合。

目前支援中文的常用的字符集有utf-8、gbk、gb2312等,mysql伺服器支援多種字符集,在同一臺伺服器、同乙個資料庫或者同乙個資料表中的不同欄位都可以使用不同的字符集

mysql的字符集包括字符集(character)和校隊規則(collation)兩個概念,其中字符集用來定義mysql中儲存字串的方式,校對規則用來你定義比較字串的方式,字符集和校對規則是一對多的關係,也就是說一種字符集可以包含多種校隊規則,mysql支援30多種字符集的70多種校驗規則

mysql的字符集和校對規則有四個級別的預設設定:伺服器級、資料庫級、資料表級、字段級。它們分別在不同的地方設定,作用也不相同

對於實際的應用程式來說,還存在客戶端和伺服器之間互動的字符集和校對規則的設定,這就是連線字符集和它的校對規則

乙個字符集至少對應著乙個校隊規則,如果沒有設定校隊規則,那麼mysql會預設使用該字符集的預設校隊規則,同樣,如果僅僅設定了校隊規則而沒有選擇字符集,那麼mysql會使用與設定的校對規則相匹配的字符集

檢視mysql支援的字符集

show

character

set;

檢視某個字符集支援的校對規則

show

collation

like

'gbk%';

二. 設定各種字符集

1. 伺服器級

① 設定伺服器級字符集與校隊規則

可以在my.cnf中設定,會在mysql服務啟動的時候確定

[mysqld]

character-set-server=gbk

或者在啟動選項中指定

mysqld --character-set-server=gbk
或者在編譯時指定(原始碼安裝mysql)

cmake . --ddefault_charset=gbk
② 檢視伺服器級的字符集和校隊規則

show variables like

'character_set_server';

show variables like

'collation_set_server';

2. 資料庫級

資料庫的字符集和校對規則可以在建立表的時候指定,也可以建立資料庫後通過alter database命令進行修改,如果資料庫中已經存在資料,則修改字符集不會對原有記錄造成影響,原有的記錄依然按照以前的字符集存放

① 在建立資料庫時指定字符集和校隊規則

create

database

ifnot

exists test_dbname default charset utf8 collate utf8_general_ci;

② 修改已存在的資料庫的字符集和校隊規則

alter

database test_dbname default

character

set utf8 collate utf8_general_ci;

③ 檢視資料庫字符集和校隊規則

show variables like

'character_set_database';

show variables like

'collation_database';

3. 資料表級

表的字符集和校對規則可以在建立表的時候指定,也可以後期通過alter table命令進行修改,如果表中原來已有記錄,則修改字符集不會對原有記錄造成影響,原有的記錄依然按照以前的字符集存放

① 建立資料表時指定字符集

create

table test_tablename (

id int

notnull,

)default charset=utf8;

② 修改資料表的字符集

alter

table test_tablename convert to

character

set utf8 collate utf8_general_ci;

③ 檢視資料表的字符集

show

create

table test_tablename \g;

4. 列字符集和校隊規則

mysql可以定義列級別的字符集和校對規則,主要是針對相同的表不同字段需要使用不同的字符集的情況,應該說遇到這種情況的概率比較低,這只是mysql提供給我們乙個靈活設定的手段

列字符集可以在建立表時指定,也可以在後期通過修改表來調整,如果在建立表的時候沒有指定字符集和校隊規則,則預設使用表的字符集和校對規則

① 修改列的字符集

alter

table test_tablename change test_title title varchar(100) character

set utf8 collate utf8_general_ci;

5. 連線字符集和校對規則

上面四種設定方式僅僅是針對於資料在資料庫中儲存時使用的字符集和校對規則,而對於實際的應用程式來說,還存在客戶端和伺服器之間互動的字符集和校對規則的設定

對於客戶端和伺服器的互動操作,mysql提供了三個不同的引數:

character_set_client 、 character_set_connection、character_set_results,分別代表客戶端、連線和返回結果的字符集,通常情況下,這三個設定應該是相同的,才可以確保使用者寫入的資料被正確讀出

可以通過乙個命令同時設定這三個引數

set

names ***;

這個命令可以同時修改這三個引數的值,或者在配置檔案my.cnf中設定

「` [mysql]

default-character-set=gbk

三. 注意事項

① 如果指定了字符集和校對規則,使用指定的字符集和校對規則

如果指定了字符集但沒有設定校對規則,使用指定字符集的預設校對規則

如果指定了校對規則但未指定字符集,則字符集使用與該校對規則相關聯的字符集

如果沒有指定字符集和校對規則,使用資料庫預設字符集和校對規則作為表的字符集和校對規則

② 相對於utf8而言,gbk比較小,每個漢字佔兩個位元組,而utf漢字編碼則需要三個位元組

mysql字符集和校對規則 Mysql校對集

簡要說明 字符集和校對規則 字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql在collation提供較強的支援,oracel在這方面沒查到相應的資料。校對規則一般分為兩類 binary collation,二元法,直接比較字元的編碼,可以認為是區分大小寫的,因為字符集中...

mysql字符集和校對規則 Mysql校對集

字符集的概念大家都清楚,校對規則很多人不了解,一般資料庫開發中也用不到這個概念,mysql在這方便貌似很先進,大概介紹一下 簡要說明 字符集和校對規則 字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql在collation提供較強的支援,oracel在這方面沒查到相應的資...

MySQL字符集和校對規則

本文對mysql支援的常規字符集和校對規則作了乙個簡單的說明,並介紹了mysql常用字符集變數的含義和設定,字符集變數的不恰當設定有可能導致包括亂碼在內的諸多問題。字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql 伺服器能夠支援多種字符集,可以使用 show chara...