字符集是指一種從二進位制編碼到某類字元符號的對映,校對是一組用於某個字符集的排序規則。每一類編碼字元都有其對應的字符集和校對規則每種字符集都可能有多種校對規則,並且都有乙個預設的校對規則。每個校對規則都是針對某個特定的字符集的,和其他的字符集都沒有關係。校對規則和字符集總是一起使用的,我們也將這樣的組合統稱為乙個字符集。
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...