MySQL 字符集和校對

2022-08-18 23:15:20 字數 1618 閱讀 3567

字符集是指一種從二進位制編碼到某類字元符號的對映,校對是一組用於某個字符集的排序規則。每一類編碼字元都有其對應的字符集和校對規則

每種字符集都可能有多種校對規則,並且都有乙個預設的校對規則。每個校對規則都是針對某個特定的字符集的,和其他的字符集都沒有關係。校對規則和字符集總是一起使用的,我們也將這樣的組合統稱為乙個字符集。

mysql的設定可以分為兩類:建立物件時的預設值在伺服器和客戶端通訊時的設定

建立物件時的預設值

mysql伺服器有預設的字符集和校對規則,每個資料庫、資料表也有自己的預設值。這是乙個逐層繼承的預設設定,最終最靠底層的預設設定將影響我們建立的物件。這些預設值,從上而下地告訴mysql應該使用什麼字符集來儲存某個列。

在這個階梯的每一層,你都可以指定乙個特定的字符集或者讓伺服器使用它的預設值:

需要注意的是:真正存放資料的是列,所以更高「階梯」的設定只是指定預設值。乙個表的預設字符集設定無法影響儲存在這個表中某個列的值。只有當建立列而沒有列指定字符集的時候,如果沒有指定字符集,表的預設字符集才有作用。

伺服器和客戶端通訊時的設定

當伺服器和客戶端通訊的時候,他們可能使用不同的字符集。這時,伺服器端將進行必要的翻譯轉換工作,如圖所示:

根據需要,可以使用set names或者set character set語句來改變上面的設定。不過在伺服器上使用這個命令只會改變伺服器端的設定。客戶端程式和客戶端的api也需要使用正確的字符集才能避免在通訊時出現問題。

在乙個資料庫中使用多個不同的字符集是一件很讓人頭疼的事情,字符集之間不相容問題會很難纏。有時候一切看起來很正常,但是當某個特殊字元出現的時候,所有型別的操作可能都無法進行。

正確的方法是,最好先為伺服器(或者資料庫) 選擇乙個合理的字符集。然後根據不同的實際情況,讓某些列選擇合適的字符集。

下面展示了在建立資料庫、表、列的時候如何顯式地指定字符集和校對規則:

create database d charset latin1;

create table d.t(

col1 char(1),

col2 char(1) charset utf8,

col3 char(1) collate latin1_bin

)default charset=cp1251;

這個表最後的字符集和校對規則如下:

field

type

collation

col1

char(1)

cp1251_general_ci

col2

char(!)

utf8_general_ci

col3

char(!)

latin1_bin

某些字符集和校對規則可能會需要更多的cpu操作,可能會消耗更多的記憶體和儲存空間,甚至還會影響索引的正常操作。

只有在排序查詢要求的字符集和伺服器資料的字符集相同的時候,才能使用索引進行排序。索引根據資料列的校對規則進行排序。如果希望使用別的校對規則進行排序,那麼mysql就需要使用檔案排序。

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

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

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

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

mysql字符集校對 MySql 字符集和校對

字符集是指一種從二進位制編碼到某類字元符號的對映,校對是指一組用於某個字符集的排序規則。而且每一類編碼字元都有其對應的字元集合校對規則。mysql 基本資訊 mysql支援多種字符集,咱們能夠經過use the information schema character sets table or t...