本文對mysql支援的常規字符集和校對規則作了乙個簡單的說明,並介紹了mysql常用字符集變數的含義和設定,字符集變數的不恰當設定有可能導致包括亂碼在內的諸多問題。
字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。
mysql
伺服器能夠支援多種字符集,可以使用
show character set
語句列出可用的字符集。
任何乙個給定的字符集至少有乙個校對規則,它也可能存在幾個校對規則。
如果希望列出乙個字符集的校對規則,可以使用
show collation
語句。例如,如果希望查詢以latin1開頭的校對規則,可以使用如下語句show collation like 'latin1%'。
校對規則一般有如下特徵:
字符集和校對規則有四個級別的預設設定:伺服器級、資料庫級、表級和連線級。
mysql
資料庫有乙個伺服器字符集和乙個伺服器校對規則,它們均不能為空。在伺服器級別,當啟動
mysqld
時,根據使用的初始選項設定來確定伺服器字符集和校對規則。可以使用
—default-character-set
設定字符集,並且可以在字符集後面新增校對規則:
--default-collation
。每乙個資料庫有乙個資料庫字符集和乙個資料庫校對規則,它不能夠為空。
create database
和alter database
語句有乙個可選的子句來指定資料庫字符集和校對規則:
create database db_name
[[default] character set charset_name]
[[default] collate collation_name]
alter database db_name
[[default] character set charset_name]
[[default] collate collation_name]預設資料庫的字符集和校對規則可以用作
character_set_database
和collation_database
系統變數。無論何時預設資料庫更改了,伺服器將設定這兩個變數的值。如果沒有預設資料庫,這兩個變數與相應的伺服器級別的變數(
character_set_server
和collation_server
)具有相同的值。
每乙個表有乙個表字符集和乙個校對規則,它不能為空。為指定表字符集和校對規則,
create table
和alter table
語句有乙個可選的子句。
create table tbl_name (column_list)
[default character set charset_name [collate collation_name]]
alter table tbl_name
[default character set charset_name] [collate collation_name]
每乙個「字元列」(即
char
、varchar
或text
型別的列)有乙個列字符集和乙個列校對規則,它不能為空。可以通過如下方式來指定列字符集和列校對規則:
col_name(col_length)
[character set charset_name [collate collation_name]]一些字符集和校對規則系統變數與客戶端和伺服器的互動有關。
在客戶端和伺服器的連線處理中也涉及了字符集和校對規則變數。每乙個客戶端有乙個連線相關的字符集和校對規則變數。
有兩個語句影響連線字符集:
其中,set names 『x』
語句與如下三個語句等價:
注:如果希望檢視上這些與字元有關的變數的值可以通過如下語句:show variables like 'character%';
對於mysql
客戶端,如果你希望使用與預設字符集不同的字符集,不需要每次啟動時執行
set names語句
以在mysql
語句行中或者選項檔案中新增乙個
—default-character-set
選項設定。如下:
[mysql]
default-character-set=koi8r
如果不希望伺服器執行任何轉換,設定
character_set_results
為null
。每乙個字串字元文字有乙個字符集和乙個校對規則,它不能為空。
乙個字串文字可能有乙個可選的字符集引介詞和
collate
子句。如下所示:
[_charset_name]'string' [collate collation_name]
binary
操作符是
collate
子句的乙個速記符。
binary『x』
等價於』x』 collate y
,這裡y
是字符集
'x'二元
校對規則的名字。每乙個字符集有乙個二元校對規則。
mysql 5.1
支援兩種字符集以儲存
unicode
資料:在
ucs-2
(二進位制
unicode
表示法)中,每乙個字元用乙個雙位元組的
unicode
編碼來表示的,第乙個位元組表示重要的意義。
utf8
字符集**換
unicode
表示)是儲存
unicode
資料的一種可選方法。它根據
rfc 3629
執行。utf8
字符集的思想是不同
unicode
字元採用變長位元組序列編碼。
以上內容多**於mysql參考手冊,如果需要更詳細的資訊,請檢視mysql參考手冊。
mysql字符集和校對規則 Mysql校對集
簡要說明 字符集和校對規則 字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql在collation提供較強的支援,oracel在這方面沒查到相應的資料。校對規則一般分為兩類 binary collation,二元法,直接比較字元的編碼,可以認為是區分大小寫的,因為字符集中...
mysql字符集和校對規則 Mysql校對集
字符集的概念大家都清楚,校對規則很多人不了解,一般資料庫開發中也用不到這個概念,mysql在這方便貌似很先進,大概介紹一下 簡要說明 字符集和校對規則 字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql在collation提供較強的支援,oracel在這方面沒查到相應的資...
字符集和校對規則
簡要說明 字符集和校對規則 字符集是一套符號和編碼。校對規則是在字符集內用於比較字元的一套規則。mysql在collation提供較強的支援,oracel在這方面沒查到相應的資料。校對規則一般分為兩類 binary collation,二元法,直接比較字元的編碼,可以認為是區分大小寫的,因為字符集中...