MySQL5 1的多字符集支援

2021-04-18 15:16:17 字數 4537 閱讀 1341

1)mysql5.1對字符集支援

1>使用多種字符集來儲存字串

2>使用多種校對規則來比較字串

3>在同一臺伺服器、同乙個資料庫或甚至在同乙個表中使用不同字符集或校對規則來混合字串

4>允許定義任何級別的字符集和校對規則

mysql伺服器能夠支援多種字符集

可以使用show character set語句列出可用的字符集:

mysql> show character set

2)字符集和校對規則有4個級別的預設設定:伺服器級、資料庫級、表級和連線級

1>伺服器級

在伺服器級別,確定方法很簡單。當啟動mysqld時,根據使用的初始選項設定來確定伺服器字符集和 校對規則。   可以使用--default-character-set設定字符集,並且可以在字符集後面為校對規則新增--default-collation。   如果沒有指定乙個字符集,那就與--default-character-set=latin1相同。

當前的伺服器字符集和校對規則可以用作character_set_server和collation_server系統變數的值。在執行時能夠改變這些變數的值。

2>資料庫級

每乙個資料庫有乙個資料庫字符集和乙個資料庫校對規則,它不能夠為空。

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] 例如:

create database db_name      default character set latin1 collate latin1_swedish_ci;

mysql選擇資料庫字符集和資料庫校對規則:

1>如果指定了character set x和collate y,那麼採用字符集x和校對規則y。

2>如果指定了character set x而沒有指定collate y,那麼採用character set x和character set x的預設校對規則。

否則,採用伺服器字符集和伺服器校對規則。

3>表級

如果在create table語句中沒有指定表字符集和校對規則,則使用資料庫字符集和校對規則作為預設值。

每乙個表有乙個表字符集和乙個校對規則,它不能為空。     為指定表字符集和校對規則,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] 例如:

create table t1 ( ... ) default character set latin1 collate latin1_danish_ci;

mysql選擇表字符集和 校對規則:

1>如果指定了character set x和collate y,那麼採用character set x和collate y。

2>如果指定了character set x而沒有指定collate y,那麼採用character set x和character set x的預設校對規則。      否則,使用資料庫字符集和校對規則作為預設值。

如果在列定義中沒有指定列字符集和校對規則,則預設使用表字符集和校對規則。

每乙個"字元"列(即,char、varchar或text型別的列)有乙個列字符集和乙個列校對規則,它不能為空。列定義語法有乙個可選子句來指

定列字符集和校對規則:

col_name (col_length)      [character set charset_name [collate collation_name]] 例如:

create table table1 (      column1 varchar(5) character set latin1 collate latin1_german1_ci );

mysql選擇列字符集和校對規則:

1>如果指定了character set x和collate y,那麼採用character set x和collate y。

2>如果指定了character set x而沒有指定collate y,那麼採用character set x和character set x的預設校對規則。     否則,採用表字符集和伺服器校對規則。

示例1:表和列定義

create table t1 (      c1 char(10) character set latin1 collate latin1_german1_ci ) default character set latin2 collate latin2_bin; 在這裡我們有乙個列使用latin1字符集和latin1_german1_ci校對規則。是顯式的定義,因此簡單明瞭。需要注意的是,在乙個latin2表中存

儲乙個latin1列不會存在問題。

示例2:表和列定義

create table t1 (      c1 char(10) character set latin1 ) default character set latin1 collate latin1_danish_ci; 這次我們有乙個列使用latin1字符集和乙個預設校對規則。儘管它顯得自然,預設校對規則卻不是表級。相反,因為latin1的預設校對規則總

是latin1_swedish_ci,列c1有乙個校對規則latin1_swedish_ci(而不是latin1_danish_ci)。

示例3:表和列定義

create table t1 (      c1 char(10) ) default character set latin1 collate latin1_danish_ci; 我們有乙個列使用乙個預設字符集和乙個預設校對規則。在這種情況下,mysql查詢表級別來確定列字符集和 校對規則。因此,列c1的字符集

是latin1,它的 校對規則是latin1_danish_ci。

示例4:資料庫、表和列定義

create database d1      default character set latin2 collate latin2_czech_ci; use d1; create table t1 (      c1 char(10) ); 我們建立了乙個沒有指定字符集和校對規則的列。我們也沒有指定表級字符集和校對規則。在這種情況下,mysql查詢資料庫級的相關設定。

(資料庫的設定變為表的設定,其後變為列的設定。)因此,列c1的字符集為是latin2,它的 校對規則是latin2_czech_ci。

4>連線級

一些字符集和校對規則系統變數與客戶端和伺服器的互動有關。

伺服器字符集和校對規則表示為character_set_server和collation_server變數的值。

預設資料庫的字符集和校對規則表示為character_set_database和collation_database變數的值。

考慮什麼是乙個"連線":它是連線伺服器時所作的事情。客戶端傳送sql語句,例如查詢,通過連線傳送到伺服器。伺服器通過連線傳送

響應給客戶端,例如結果集。對於客戶端連線,這樣會導致一些關於連線的字符集和校對規則的問題,這些問題均能夠通過系統變數來解決.

1>當查詢離開客戶端後,在查詢中使用哪種字符集?      答:伺服器使用character_set_client變數作為客戶端傳送的查詢中使用的字符集。

2>伺服器接收到查詢後應該轉換為哪種字符集?     答:轉換時,伺服器使用character_set_connection和collation_connection系統變數。     它將客戶端傳送的查詢從character_set_client系統變數轉換到character_set_connection

3>伺服器傳送結果集或返回錯誤資訊到客戶端之前應該轉換為哪種字符集?      答:character_set_results變數指示伺服器返回查詢結果到客戶端使用的字符集。包括結果資料,例如列值和結果元資料(如列名)。

有兩個語句影響連線字符集:   set names 'charset_name'   set character set charset_name   set names顯示客戶端傳送的sql語句中使用什麼字符集。

set names 'x'語句與這三個語句等價: mysql> set character_set_client = x; mysql> set character_set_results = x; mysql> set character_set_connection = x;

mysql支援多少字符集 mysql字符集支援

1 mysql5.1對字符集支援 1 使用多種字符集來儲存字串 2 使用多種校對規則來比較字串 3 在同一臺伺服器 同乙個資料庫或甚至在同乙個表中使用不同字符集或校對規則來混合字串 4 允許定義任何級別的字符集和校對規則 mysql伺服器能夠支援多種字符集 可以使用show character se...

Unicode字符集和多字符集

由於各國語言的加入,ascii已經不能滿足資訊交流的需要,因此,為了能夠表示其它國家的文字,各國在ascii的基礎上制定了自己的字符集,它們正式的名稱應該是mbcs multi byte chactacter system,即多位元組字元系統 型別說明 unicode ansi 通用型別 字元wch...

寬位元組字符集和多字符集

unicode 寬位元組字符集 1.如何取得乙個既包含單位元組字元又包含雙位元組字元的字串的字元個數?可以呼叫microsoft visual c 的執行期庫包含函式 mbslen來操作多位元組 既包括單位元組也包括雙位元組 字串。呼叫strlen函式,無法真正了解字串中究竟有多少字元,它只能告訴你...