1、+-+-+| Variable_name | Value | character_set_client | utf8 | character_set_connection | utf8 | character_set_database | latin1 | character_set_filesystem | utf8 | character_set_results | utf8 | character_set_server | utf8 | character_set_system | utf8 | character_sets_dir | /usr/local/mysql/share/ch
2、arsets/ |8 rows in set (0.00 sec)名词解释: character_set_client:客户端请求数据的字符集 character_set_connection:客户机/服务器连接的字符集 character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,这个变量建议由系统自己管理,不要人为定义。 character_set_filesystem:把os上文件名转化成此字符集,即把 character_set_client转换charact
3、er_set_filesystem, 默认binary是不做任何转换的 character_set_results:结果集,返回给客户端的字符集 character_set_server:数据库服务器的默认字符集 character_set_system:系统字符集,这个值总是utf8,不需要设置。这个字符集用于数据库对象(如表和列)的名字,也用于存储在目录表中的函数的名字。4、查看当前数据库的校对规则collation%+-+-+| collation_connection | utf8_general_ci | collation_database | latin1_swedish_ci
4、| collation_server | utf8_general_ci |3 rows in set (0.01 sec)collation_connection 当前连接的字符集。collation_database 当前日期的默认校对。每次用USE语句来“跳转”到另一个数据库的时候,这个变量的值就会改变。如果没有当前数据库,这个变量的值就是collation_server变量的值。collation_server 服务器的默认校对。排序方式的命名规则为:字符集名字_语言_后缀,其中各个典型后缀的含义如下:1)_ci:不区分大小写的排序方式2)_cs:区分大小写的排序方式3)_bin:二进
5、制排序方式,大小比较将根据字符编码,不涉及人类语言,因此_bin的排序方式不包含人类语言三、MySQL字符集的设置1、概述MySQL字符集设置分为两类:1)创建对象的默认值。2)控制server和client端交互通信的配置。1、创建对象的默认值字符集合校对规则有4个级别的默认设置:1)服务器级别;2)数据库级别;3)表级别、列级别;4)连接级别。更低级别的设置会集成高级别的设置。这里有一个通用的规则:先为服务器或者数据库选择一个合理的字符集,然后根据不同的实际情况,让某个列选择自己的字符集。2、控制server和client端交互通信的配置大部分MySQL客户端都不具备同时支持多种字符集的能
6、力,每次都只能使用一种字符集。客户和服务器之间的字符集转换工作是由如下几个MySQL系统变量控制的。1)character_set_server:mysql server默认字符集。2)character_set_database:数据库默认字符集。3)character_set_client:MySQL server假定客户端发送的查询使用的字符集。4)character_set_connection:MySQL Server接收客户端发布的查询请求后,将其转换为character_set_connection变量指定的字符集。5)character_set_results:mysql se
7、rver把结果集和错误信息转换为character_set_results指定的字符集,并发送给客户端。6)character_set_system:系统元数据(字段名等)字符集还有以collation_开头的同上面对应的变量,用来描述字符序。注意事项: f中的default_character_set设置只影响mysql命令连接服务器时的连接字符集,不会对使用libmysqlclient库的应用程序产生任何作用! 对字段进行的SQL函数操作通常都是以内部操作字符集进行的,不受连接字符集设置的影响。 SQL语句中的裸字符串会受到连接字符集或introducer设置的影响,对于比较之类的操作可能
8、产生完全不同的结果,需要小心!3、默认情况下字符集选择规则(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;(2)安装MySQL 时,可以在配置文件 (f) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时character_set_server被设定为这个默认的字符集;(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;(5)当选定了一个数据库时,character_se
9、t_database被设定为这个数据库默认的字符集;(6)在这个数据库里创建一张表时,表默认的字符集被设定为character_set_database,也就是这个数据库默认的字符集;(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;2、分述2.1、为列分配字符集属于同一个表的不同列可以有不同的字符集,如果没有为一个列显示的定义字符集就使用默认字符集。创建一个表的时候,若显示的为列指定字符集,则字符集作为数据类型选项包含在其中,要放在数据类型后面及空指定和主键前面。例如:create table column_charset(c1 char(10) charact
10、er set utf8 not null,c2 char(10) char set utf8,c3 varchar(10) charset utf8,c4 varchar(10) engine=innodb;注意:character set可以简写为char set和charset使用show create table table_name;命令查看column_charset建表语句: show create table column_charsetG;* 1. row *Table: column_charsetCreate Table: CREATE TABLE column_chars
11、et (c1 char(10) CHARACTER SET utf8 NOT NULL,c2 char(10) CHARACTER SET utf8 DEFAULT NULL,c3 varchar(10) CHARACTER SET utf8 DEFAULT NULL,c4 varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.01 sec)ERROR:No query specified插入数据,感受一下效果: insert into column_charset(c1,c2,c3,c4)
12、value(图灵,chavin);Query OK, 1 row affected (0.01 sec) select * from column_charset;+-+-+-+-+| c1 | c2 | c3 | c4 | 图灵 | 图灵 | 图灵 | chavin |1 row in set (0.00 sec)2.2、为表分配字符集create table table_charset(c1 varchar(10),c2 varchar(10)engine=innodb default charset=utf8;为表指定字符集可以使用以下几种方式:default charset=utf8;
13、charset=utf8;default character set=utf8;character set=utf8;default char set=utf8;char set=utf8;检查建表语句: show create table table_charset; table_charset CREATE TABLE table_charset (c1 varchar(10) DEFAULT NULL,c2 varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8测试: insert into table_charset(c
14、1,c2) values(图灵, select * from table_charset;+-+-+| c1 | c2 | 图灵 | 图灵 |2.3、为数据库指定字符集创建的每个数据库都有一个默认字符集,如果没有指定,就用latin1。create database dbking charset=utf8;创建数据库分配字符集可以采用以下几种子句:charset utf8;default charset utf8;char set utf8;default char set utf8;character set utf8;default character set utf8;使用show cr
15、eate database db_name;命令查看数据库创建语句: show create database dbking;+-+-+| Database | Create Database | dbking | CREATE DATABASE dbking /*!40100 DEFAULT CHARACTER SET utf8 */ |2.4、为列分配校对规则每个列都应该有一个校对,如果没有显示指定,MySQL就使用属于该字符集的默认校对。如果指定了一个字符集和一个校对,字符集应该放在前面。create table column_collate(c1 varchar(10) charset
16、 utf8 collate utf8_romanian_ci not null,c2 varchar(10) charset utf8 collateutf8_spanish_ci)engine=innodb;查看表的校验规则信息: select table_name,column_name,collation_namefrom information_schema.columnswhere table_name=column_collate+-+-+-+| table_name | column_name | collation_name | column_collate | c1 | ut
17、f8_romanian_ci | column_collate | c2 | utf8_spanish_ci |2 rows in set (0.04 sec)字符集和校对在处理字符表达式的过程中扮演着重要角色。我们不能比较两个属于不同校对的不同字符值。 insert into column_collate(c1,c2) values(AQuery OK, 1 row affected (0.22 sec) select * from column_collate;+-+-+| A | A | select * from column_collate where c1=c2;ERROR 126
18、7 (HY000): Illegal mix of collations (utf8_romanian_ci,IMPLICIT) and (utf8_spanish_ci,IMPLICIT) for operation =2.5、为表指定校对规则create table table_collate(c2 varchar(10)engine=innodb default charset utf8 collate utf8_romanian_ci;检查表的校对规则: select table_name,column_name,collation_name from information_sche
19、ma.columns where table_name=table_collate+-+-+-+| table_collate | c1 | utf8_romanian_ci | table_collate | c2 | utf8_romanian_ci |2 rows in set (0.00 sec)2.6、为数据库指定校对规则create database dbking102 default charset utf8 collate utf8_romanian_ci;查看数据库定义语句: show create database dbking102G;Database: dbking10
20、2Create Database: CREATE DATABASE dbking102 /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_romanian_ci */2.7、字符直接量字符集如果没有显示指定,那么字符直接量的字符集就是数据库的默认字符集。如果要显示分配另一个字符集,需要把字符集的名字放在直接量前面,并且要在字符集前面加上下划线。 select _utf8语言 Language 言語 +-+| 语言 Language 言語 |+-+ 2.8、修改和设置MySQL服务器级别字符集MySQL服务器支持众多不同的字符集,这类字符集可在编译
21、时和运行时指定。 1) 编译时指定编译时可指定默认字符集和默认校对规则,要想同时更改默认字符集和校对规则,要同时使用-with-charset和-with-collation选项。校对规则必须是字符集的合法校对规则。./configure - with-charset=CHARSET -with-collation=COLLATION通过configure选项-with-extra-charsets=LIST,可以定义在服务器中再定义增加字符集。LIST 指下面任何一项: a.空格间隔的一系列字符集名 plex -,以包括不能动态装载的所有字符集 c.all ,以将所有字符集包括进二进制./configure - with-charset=CHARSET -with-collation=COLLATION -with-extra-charsets=all 2) 在参数文件f中指定mysqldcharacter_set_server=utf8 -影响参数:character_set_server 和 character_set_database -注意:修改后要重启数据库才能生效。clientdefault-character-set=utf8
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1