程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MYSQL字符集支持

MYSQL字符集支持

編輯:關於MYSQL數據庫
    提示:MySQL4.1以前版本服務器只能使用單一字符集,從MySQL4.1版本開始,不僅服務器能夠使用多種字符集,而且在服務器、數據庫、數據表、數據列以及字符串常數多個級別上設置不同的字符集。


MySQL4.1以前版本服務器只能使用單一字符集,從MySQL4.1版本開始,不僅服務器能夠使用多種字符集,而且在服務器、數據庫、數據表、數據列以及字符串常數多個級別上設置不同的字符集。

1.4.1. MySQL4.1以前版本
MySQL4.1以前版本的字符集由服務器默認指定,默認值是編譯系統時指定的字符集,該字符集也可通過在啟動服務器時指定--default-character-set來修改。這種修改會對數據表的索引造成影響,因為索引的順序是和字符集有關的,修改字符集會使這個已排序的順序產生錯誤。要解決該問題,我們要用修改後的字符集的排序順序重建表的索引。重建索引有以下幾種方法:

用MySQLdump導出數據,再清除表裡的內容,最後用導出文件重新導入。數據表的索引將在導入數時重建。該方法適用於所有數據表類型。

刪除索引,然後重建。用alter table命令或drop index和create index命令來完成。該方法也適用於所有數據表類型。但該方法需要我們了解重建索引的精確定義。

MyISAM數據表的索引可以用myisamchk程序的--recover和--quick選項加上一個用來設定新字符集的--set-character-set選項進行重建。還可以用MySQLcheck程序的--repair和--quick選項或者一個帶QUICK選項的REPLACE TABLE語句來重建索引,這種方式較方便。

1.4.2. MySQL4.1以後版本
MySQL4.1以後的版本對字符集的支持好了很多,具有以下新增功能:

支持服務器同時使用多種字符集。

允許在服務器,數據庫,數據表,數據列等多級別上設置不同的字符集。

服務器的默認字符集在編譯時選定,但可在啟動服務器時用--default-character-set選項來更改。

用ALTER DATABASE db_name DEFAULT CHARACTER SET charset來設置數據庫字符集。 如果只有default參數,則使用服務器的字符集。

用CREATE TABLE table_name(...) CHARACTER SET = charset設置數據表字符集。如果charset為default,則使用數據表所在數據庫的字符集作為數據表的字符集。

在數據列中,可用CHARACTER SET charset屬性來設置數據列的字符集。charset不能是default,如果沒有該屬性,則默認使用數據表的字符集。允許設置字符集的數據列有char,varchar(不帶binary屬性)及TEXT類型。

用_charset str轉換字符串常數的字符集。如:_utf8 'MySQL',_latinl 'Oracle'。該方法只適用於括在引號內的字符串,其它十六進制常數 、字符串表達式等可用CONVERT()函數進行轉換,如:SELECT CONVERT( str USING charset)。

通過MySQL提供的函數可進行字符集轉換和查詢。

新增的COLLATE操作符使我們可按某一種字符集的排序順序來處理另一種字符集的數據。如:SELECT a from t ORDER BY a COLLATE utf-8;

用SHOW CHARACTER SET命令可顯示服務器支持的字符集列表。

當服務器轉換到另一種字符集時,會自動對索引進行重新排序。

通過UTF-8和UCS2字符集提供了Unicode支持。

MySQL現在還不支持:1,在同一個字符串裡混用不同字符集的字符;2,在同一個數據列裡混用不同的字符集。

1.4.3. 各級字符集的查詢方法
服務器級

SHOW CHARACTER SET;可查出可供使用的所有字符集。
SHOW VARIABLES LIKE 'character_set';可查出服務器的默認字符集。
可查出數據庫級的字符集。

SHOW CREATE DATABASE db_name;
兩條命令可查出數據表的字符集。

SHOW CREATE TABLE table_name;
SHOW TABLE STATUS LIKE 'table_name'
以下幾命令可查出數據列的字符集:

DESCRIBE table_name;
SHOW COLUMNS FROM table_name;
SHOW CREATE TABLE table_name;
用CHARSET()函數可確定特定字符串,字符串表達式或數據列值相關聯的字符串的字符集。如:SELECT CHARSET(str)。

1.4.4. Unicode支持
MySQL提供兩種字符集來支持Unicode。一個是UTF-8,一種可變長的編碼格式,需用1至4個字節來表示一個字符;另一個是UCS2,該字符集中的每個字符需要用兩個字節來表示。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved