<< 2006年,Java占了印度GDP的2.1% | 首页 | Java实现的一些排序算法 >>

如何指定mysql的字符集

使用SHOW CHARACTER SET语句列出可用的字符集:

mysql> SHOW CHARACTER SET;

字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级:

服务器字符集和校对

MySQL服务器有一个服务器字符集和一个服务器校对规则,它们均不能设置为空。
MySQL按照如下方法确定服务器字符集和服务器校对规则:
·         当服务器启动时根据有效的选项设置
·         根据运行时的设定值
在服务器级别,确定方法很简单。当启动mysqld时,根据使用的初始选项设置来确定服务器字符集和 校对规则。
可以使用--character-set-server设置字符集,并且可以在字符集后面为 校对规则添加--collation-server
如果没有指定一个字符集,那就与--character-set-server=latin1相同。如果你仅指定了一个字符集
(例如,latin1),但是没有指定一个 校对规则,那就与--character-set-server=latin1 
--collation-server=latin1_swedish_ci相同因为latin1_swedish_cilatin1默认校对规则。
可以使用以下命令设置mysql服务器的字符集:
shell> mysqld --character-set-server=utf8
shell> mysqld_safe --character-set-server=utf8
 
更改设定值的一个方法是通过重新编译。如果希望在从源程序构建时更改默认服务器字符集和校对规则,使用:
--with-charset--with-collation作为configure的参量。
 
例如:
shell> ./configure --with-charset=utf8

 

mysqldconfigure都验证字符集/校对规则组合是否有效。如果无效,每个程序都显示一个错误信息,然后终止。

 

当前的服务器字符集和校对规则可以用作character_set_servercollation_server系统变量的值。在运行时能够改变
这些变量的值。
 

数据库字符集和校对

 

每一个数据库有一个数据库字符集和一个数据库校对规则,它不能够为空。CREATE DATABASEALTER 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这样选择数据库字符集和数据库校对规则:

·         如果指定了CHARACTER SET XCOLLATE Y,那么采用字符集X和校对规则Y

·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET XCHARACTER SET X的默认校对规则。

·         否则,采用服务器字符集和服务器校对规则。

如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。它们没有其它目的。

默认数据库的字符集和校对规则可以用作character_set_databasecollation_database系统变量。无论何时默认数据库更改了,

服务器都设置这两个变量的值。如果没有默认数据库,这两个变量与相应的服务器级别的变量(character_set_servercollation_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]

例如:

CREATE TABLE t1 ( ... )

DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

MySQL按照下面的方式选择表字符集和 校对规则:

·         如果指定了CHARACTER SET XCOLLATE Y,那么采用CHARACTER SET XCOLLATE Y

·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET XCHARACTER SET X的默认校对规则。

·         否则,采用服务器字符集和服务器校对规则。

如果在列定义中没有指定列字符集和校对规则,则默认使用表字符集和校对规则。表字符集和校对规则是MySQL的扩展;在标准SQL中没有。

列字符集和校对

每一个“字符”列(即,CHARVARCHARTEXT类型的列)有一个列字符集和一个列 校对规则,它不能为空。列定义语法有一个可选子句来指定
列字符集和校对规则:
col_name {CHAR | VARCHAR | TEXT} (col_length)
    [CHARACTER SET charset_name [COLLATE collation_name]]

例如:

CREATE TABLE Table1

(

    column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci

);

MySQL按照下面的方式选择列字符集和校对规则:

·         如果指定了CHARACTER SET XCOLLATE Y,那么采用CHARACTER SET XCOLLATE Y

·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET XCHARACTER SET X的默认校对规则。

·         否则,采用表字符集和服务器校对规则。

CHARACTER SETCOLLATE子句是标准的SQL

标签 :



发表评论 发送引用通报