MySQL字符集详解Word格式.docx

上传人:b****6 文档编号:19121251 上传时间:2023-01-04 格式:DOCX 页数:15 大小:143.80KB
下载 相关 举报
MySQL字符集详解Word格式.docx_第1页
第1页 / 共15页
MySQL字符集详解Word格式.docx_第2页
第2页 / 共15页
MySQL字符集详解Word格式.docx_第3页
第3页 / 共15页
MySQL字符集详解Word格式.docx_第4页
第4页 / 共15页
MySQL字符集详解Word格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

MySQL字符集详解Word格式.docx

《MySQL字符集详解Word格式.docx》由会员分享,可在线阅读,更多相关《MySQL字符集详解Word格式.docx(15页珍藏版)》请在冰豆网上搜索。

MySQL字符集详解Word格式.docx

+--------------------------+----------------------------------+

|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/charsets/|

8rowsinset(0.00sec)

名词解释:

 

character_set_client:

客户端请求数据的字符集

character_set_connection:

客户机/服务器连接的字符集

character_set_database:

默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;

如果没有默认数据库,那就使用character_set_server指定的字符集,这个变量建议由系统自己管理,不要人为定义。

character_set_filesystem:

把os上文件名转化成此字符集,即把character_set_client转换character_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|

|collation_server|utf8_general_ci|

3rowsinset(0.01sec)

collation_connection当前连接的字符集。

collation_database 

当前日期的默认校对。

每次用USE语句来“跳转”到另一个数据库的时候,这个变量的值就会改变。

如果没有当前数据库,这个变量的值就是collation_server变量的值。

collation_server服务器的默认校对。

排序方式的命名规则为:

字符集名字_语言_后缀,其中各个典型后缀的含义如下:

1)_ci:

不区分大小写的排序方式

2)_cs:

区分大小写的排序方式

3)_bin:

二进制排序方式,大小比较将根据字符编码,不涉及人类语言,因此_bin的排序方式不包含人类语言

三、MySQL字符集的设置

1、概述

MySQL字符集设置分为两类:

1)创建对象的默认值。

2)控制server和client端交互通信的配置。

1、创建对象的默认值

字符集合校对规则有4个级别的默认设置:

1)服务器级别;

2)数据库级别;

3)表级别、列级别;

4)连接级别。

更低级别的设置会集成高级别的设置。

这里有一个通用的规则:

先为服务器或者数据库选择一个合理的字符集,然后根据不同的实际情况,让某个列选择自己的字符集。

2、控制server和client端交互通信的配置

大部分MySQL客户端都不具备同时支持多种字符集的能力,每次都只能使用一种字符集。

客户和服务器之间的字符集转换工作是由如下几个MySQL系统变量控制的。

1)character_set_server:

mysqlserver默认字符集。

2)character_set_database:

数据库默认字符集。

3)character_set_client:

MySQLserver假定客户端发送的查询使用的字符集。

4)character_set_connection:

MySQLServer接收客户端发布的查询请求后,将其转换为character_set_connection变量指定的字符集。

5)character_set_results:

mysqlserver把结果集和错误信息转换为character_set_results指定的字符集,并发送给客户端。

6)character_set_system:

系统元数据(字段名等)字符集

还有以collation_开头的同上面对应的变量,用来描述字符序。

注意事项:

•f中的default_character_set设置只影响mysql命令连接服务器时的连接字符集,不会对使用libmysqlclient库的应用程序产生任何作用!

•对字段进行的SQL函数操作通常都是以内部操作字符集进行的,不受连接字符集设置的影响。

•SQL语句中的裸字符串会受到连接字符集或introducer设置的影响,对于比较之类的操作可能产生完全不同的结果,需要小心!

3、默认情况下字符集选择规则

(1)编译MySQL时,指定了一个默认的字符集,这个字符集是latin1;

(2)安装MySQL时,可以在配置文件(f)中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;

(3)启动mysqld时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时character_set_server被设定为这个默认的字符集;

(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;

(5)当选定了一个数据库时,character_set_database被设定为这个数据库默认的字符集;

(6)在这个数据库里创建一张表时,表默认的字符集被设定为character_set_database,也就是这个数据库默认的字符集;

(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

2、分述

2.1、为列分配字符集

属于同一个表的不同列可以有不同的字符集,如果没有为一个列显示的定义字符集就使用默认字符集。

创建一个表的时候,若显示的为列指定字符集,则字符集作为数据类型选项包含在其中,要放在数据类型后面及空指定和主键前面。

例如:

createtablecolumn_charset(

c1char(10)charactersetutf8notnull,

c2char(10)charsetutf8,

c3varchar(10)charsetutf8,

c4varchar(10))engine=innodb;

注意:

characterset可以简写为charset和charset

使用showcreatetabletable_name;

命令查看column_charset建表语句:

showcreatetablecolumn_charset\G;

***************************1.row***************************

Table:

column_charset

CreateTable:

CREATETABLE`column_charset`(

`c1`char(10)CHARACTERSETutf8NOTNULL,

`c2`char(10)CHARACTERSETutf8DEFAULTNULL,

`c3`varchar(10)CHARACTERSETutf8DEFAULTNULL,

`c4`varchar(10)DEFAULTNULL

)ENGINE=InnoDBDEFAULTCHARSET=latin1

1rowinset(0.01sec)

ERROR:

Noqueryspecified

插入数据,感受一下效果:

insertintocolumn_charset(c1,c2,c3,c4)value("

图灵"

"

chavin"

);

QueryOK,1rowaffected(0.01sec)

select*fromcolumn_charset;

+--------+--------+--------+--------+

|c1|c2|c3|c4|

|图灵|图灵|图灵|chavin|

1rowinset(0.00sec)

2.2、为表分配字符集

createtabletable_charset(

c1varchar(10),

c2varchar(10))engine=innodbdefaultcharset=utf8;

为表指定字符集可以使用以下几种方式:

defaultcharset=utf8;

charset=utf8;

defaultcharacterset=utf8;

characterset=utf8;

defaultcharset=utf8;

charset=utf8;

检查建表语句:

showcreatetabletable_charset;

table_charset

CREATETABLE`table_charset`(

`c1`varchar(10)DEFAULTNULL,

`c2`varchar(10)DEFAULTNULL

)ENGINE=InnoDBDEFAULTCHARSET=utf8

测试:

insertintotable_charset(c1,c2)values('

图灵'

'

select*fromtable_charset;

+--------+--------+

|c1|c2|

|图灵|图灵|

2.3、为数据库指定字符集

创建的每个数据库都有一个默认字符集,如果没有指定,就用latin1。

createdatabasedbkingcharset=utf8;

创建数据库分配字符集可以采用以下几种子句:

charsetutf8;

defaultcharsetutf8;

charsetutf8;

defaultcharsetutf8;

charactersetutf8;

defaultcharactersetutf8;

使用showcreatedatabasedb_name;

命令查看数据库创建语句:

showcreatedatabasedbking;

+----------+-----------------------------------------------------------------+

|Database|CreateDatabase|

|dbking|CREATEDATABASE`dbking`/*!

40100DEFAULTCHARACTERSETutf8*/|

2.4、为列分配校对规则

每个列都应该有一个校对,如果没有显示指定,MySQL就使用属于该字符集的默认校对。

如果指定了一个字符集和一个校对,字符集应该放在前面。

createtablecolumn_collate(

c1varchar(10)charsetutf8collateutf8_romanian_cinotnull,

c2varchar(10)charsetutf8collate 

utf8_spanish_ci)engine=innodb;

查看表的校验规则信息:

selecttable_name,column_name,collation_name

frominformation_schema.columns

wheretable_name='

column_collate'

+----------------+-------------+------------------+

|table_name|column_name|collation_name|

|column_collate|c1|utf8_romanian_ci|

|column_collate|c2|utf8_spanish_ci|

2rowsinset(0.04sec)

字符集和校对在处理字符表达式的过程中扮演着重要角色。

我们不能比较两个属于不同校对的不同字符值。

insertintocolumn_collate(c1,c2)values('

A'

QueryOK,1rowaffected(0.22sec)

select*fromcolumn_collate;

+----+------+

|A|A|

select*fromcolumn_collatewherec1=c2;

ERROR1267(HY000):

Illegalmixofcollations(utf8_romanian_ci,IMPLICIT)and(utf8_spanish_ci,IMPLICIT)foroperation'

='

2.5、为表指定校对规则

createtabletable_collate(

c2varchar(10))engine=innodbdefaultcharsetutf8collateutf8_romanian_ci;

检查表的校对规则:

selecttable_name,column_name,collation_namefrominformation_schema.columnswheretable_name='

table_collate'

+---------------+-------------+------------------+

|table_collate|c1|utf8_romanian_ci|

|table_collate|c2|utf8_romanian_ci|

2rowsinset(0.00sec)

2.6、为数据库指定校对规则

createdatabasedbking102defaultcharsetutf8collateutf8_romanian_ci;

查看数据库定义语句:

showcreatedatabasedbking102\G;

Database:

dbking102

CreateDatabase:

CREATEDATABASE`dbking102`/*!

40100DEFAULTCHARACTERSETutf8COLLATEutf8_romanian_ci*/

2.7、字符直接量字符集

如果没有显示指定,那么字符直接量的字符集就是数据库的默认字符集。

如果要显示分配另一个字符集,需要把字符集的名字放在直接量前面,并且要在字符集前面加上下划线。

select_utf8'

语言Language言語язык'

+---------------------------------+

|语言Language言語язык 

|

+---------------------------------+ 

2.8、修改和设置MySQL服务器级别字符集

MySQL服务器支持众多不同的字符集,这类字符集可在编译时和运行时指定。

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中指定

[mysqld]

character_set_server=utf8

--影响参数:

character_set_server和character_set_database

--注意:

修改后要重启数据库才能生效。

[client]

default-character-set=utf8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1