每個資料庫都有資料庫字元集和資料庫校對。 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]
關鍵字 SCHEMA
可以代替 DATABASE
使用。
CHARACTER SET
和 COLLATE
子句可以讓您在同一 MySQL 伺服器上建立具有不同字元集和校對的資料庫。
資料庫選項會儲存在資料字典中,並且可以透過檢查 Information Schema SCHEMATA
資料表來檢視。
範例
CREATE DATABASE db_name CHARACTER SET latin1 COLLATE latin1_swedish_ci;
MySQL 會以以下方式選擇資料庫字元集和資料庫校對:
如果同時指定
CHARACTER SET
和charset_name
COLLATE
,則會使用字元集collation_name
charset_name
和校對collation_name
。如果指定了
CHARACTER SET
但未指定charset_name
COLLATE
,則會使用字元集charset_name
及其預設校對。若要檢視每個字元集的預設校對,請使用SHOW CHARACTER SET
陳述式或查詢INFORMATION_SCHEMA
CHARACTER_SETS
資料表。如果指定了
COLLATE
但未指定collation_name
CHARACTER SET
,則會使用與collation_name
相關聯的字元集和校對collation_name
。否則 (未指定
CHARACTER SET
或COLLATE
),則會使用伺服器字元集和伺服器校對。
預設資料庫的字元集和校對可以從系統變數 character_set_database
和 collation_database
的值中決定。當預設資料庫變更時,伺服器會設定這些變數。如果沒有預設資料庫,則這些變數的值會與對應的伺服器層級系統變數 character_set_server
和 collation_server
的值相同。
若要檢視指定資料庫的預設字元集和校對,請使用以下陳述式:
USE db_name;
SELECT @@character_set_database, @@collation_database;
或者,若要在不變更預設資料庫的情況下顯示值:
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';
資料庫字元集和校對會影響伺服器運作的以下方面:
對於
CREATE TABLE
陳述式,如果未指定資料表字元集和校對,則會使用資料庫字元集和校對作為資料表定義的預設值。若要覆寫此行為,請提供明確的CHARACTER SET
和COLLATE
資料表選項。對於不包含
CHARACTER SET
子句的LOAD DATA
陳述式,伺服器會使用系統變數character_set_database
指示的字元集來解譯檔案中的資訊。若要覆寫此行為,請提供明確的CHARACTER SET
子句。對於預存常式 (程序和函數),在常式建立時生效的資料庫字元集和校對會用作字元資料參數的字元集和校對,這些參數的宣告不包含
CHARACTER SET
或COLLATE
屬性。若要覆寫此行為,請明確提供CHARACTER SET
和COLLATE
。