MySQL字符集
1. 数据库字符集和校对
1 |
CREATE DATABASE <em>db_name</em> |
1 |
[[DEFAULT] CHARACTER SET <em>charset_name</em>] |
1 |
[[DEFAULT] COLLATE <em>collation_name</em>] |
1 |
1 |
ALTER DATABASE <em>db_name</em> |
1 |
[[DEFAULT] CHARACTER SET <em>charset_name</em>] |
1 |
[[DEFAULT] COLLATE <em>collation_name</em>] |
例如:
1 |
CREATE DATABASE <em>db_name</em> |
1 |
DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; |
MySQL这样选择数据库字符集和数据库校对规则:
· 如果指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校对规则Y。
· 如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。
· 否则,采用服务器字符集和服务器校对规则。
MySQL的CREATE DATABASE … DEFAULT CHARACTER SET …语法与标准SQL的CREATE SCHEMA … CHARACTER SET …语法类似。因此,可以在同一个MySQL服务器上创建使用不同字符集和 校对规则的数据库。
如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。它们没有其它目的。
默认数据库的字符集和校对规则可以用作character_set_database和 collation_database系统变量。无论何时默认数据库更改了,服务器都设置这两个变量的值。如果没有 默认数据库,这两个变量与相应的服务器级别的变量(character_set_server和collation_server)具有相同的值。
2. 表字符集和校对
1 |
CREATE TABLE <em>tbl_name</em> (<em>column_list</em>) |
1 |
[DEFAULT CHARACTER SET <em>charset_name</em> [COLLATE <em>collation_name</em>]] |
1 |
1 |
ALTER TABLE <em>tbl_name</em> |
1 |
[DEFAULT CHARACTER SET <em>charset_name</em>] [COLLATE <em>collation_name</em>] |
例如:
1 |
CREATE TABLE t1 ( ... ) |
DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
MySQL按照下面的方式选择表字符集和 校对规则:
· 如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。
· 如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。
· 否则,采用服务器字符集和服务器校对规则。
如果在列定义中没有指定列字符集和校对规则,则默认使用表字符集和校对规则。表字符集和校对规则是MySQL的扩展;在标准SQL中没有。
3. 列字符集和校对
1 |
<em>col_name</em> {CHAR | VARCHAR | TEXT} (<em>col_length</em>) |
1 |
[CHARACTER SET <em>charset_name</em> [COLLATE <em>collation_name</em>]] |
例如:
CREATE TABLE Table1
(
column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci
);
MySQL按照下面的方式选择列字符集和校对规则:
· 如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。
· 如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。
· 否则,采用表字符集和服务器校对规则。
CHARACTER SET和COLLATE子句是标准的SQL。