字符集

一、字符集的选择

(1)如果应用要处理各种各样的文字,或者将发布到使用不同语言的国家或者地区,就应该选择Unicode字符集。对MySQl来说目前就是UTF-8

(2)如果应用中涉及已有数据的导入,就要充分考虑数据库字符集对已有数据的兼容性。

(3)只需要支持一般中文,数据量很大,行呢要求很高,则应该选择双字节定长编码的中文字符集,GBK等。

(4)主要处理英文字符,仅有少量汉字数据,那么选UTF-8

(5)若需要做大量的字符运算,如比较、排序等,那么选择定长字符集可能更好,因为比变成字符集的处理速度快

(6)如果所有客户端都支持相同的字符集,则应该优先选择该字符集作为数据库字符集。

2、MySQL支持的字符集

(1)同一台服务器、同一个数据库、用一个表的不同字段都可以指定使用不同的字符集。

(2)查看所有可用的字符集:show charactor set;

         显示所有的字符集和该字符集默认的校对规则:

desc information_schema.character_sets;

(3)字符集:定义MySQL存储字符串的方式。30多种

         校对规则:定义比较字符串的方式。70多种。校验规则命名约定:字符集名称+语音民名+:_ci大小写不敏感,_cs大小写敏感,_bin二元,即笔记是基于字符编码的值而与language无关

         字符集:校对规则=1:n

(4)查看相关字符集的校对规则:

show collation like 'gbk%';

通过系统表information_schema.COLLATIONS


3、MYSQL字符集的设置

(1)mysql的字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和字段级。

(2)服务器字符集和校对规则

a.可在服务器启动的时候确定。

b.可以在my.cnf中设置:

[mysqld]

character-set-server=gbk

c.在启动选项中指定:

mysqld --charactor-set-server=gbk

d.在编译时自定:

shell>  cmake  .    -DDEFAULT_CHARSET=gbk

e.默认字符集:latin1

f.查询当前服务器的字符集和校对规则:

show variables like 'character_set_server';

show variables like 'collation_server';

(3)表字符集和校对规则

如果表中已有记录,修改字符集对原有的记录并没有影响,不会按照新的字符集进行存放,表的字段仍然使用原来的字符集。

推荐在创建表的时候明确指定字符集和校对规则,以免受到默认值的影响。

(4)列字符集和校对规则

相同的表不同字段需要使用不同的字符集。

创建表时指定、修改表时调整

(5)连接字符集和校对规则

上面4种设置方式,确定的是数据保存的字符集和校对规则。但是对于实际的应用访问来说,还存在客户端和服务器之间交互的字符集和校对规则的设置。3个不同的参数:character_set_client、character_set_connection和character_set_results分别代表客户端、连接和返回结果的字符集。通常这3个参数相同才能保证写入正确的读出。


SET NAMES ***;命令同时修改这3个参数的值。需要应用每次连接数据库后都执行这个命令。


在my.cnf中设置:

[mysql]

default-charater-set=gbk

       服务器启动后,所有连接默认就是使用GBK字符集进行连接的,而不需要在程序中再执行set names命令。字符串常量的字符集也是由character_set_connection参数来指定的。


通过[_charset_name]'string'[COLLATE collation_name]命令强制字符串的字符集和校对规则。(通常基本不需要用户强制指定字符串字符集)

select   _gbk  '字符集'

select   _latin1 '字符集'


4、字符集的修改步骤

(1)不能直接通过alter database character set ***或者alter table tablename character set ***命令进行。这2个命令都没有更新已有记录的字符集,而只是对新创建的表或者记录生效。

(2)已有记录的字符集调整,需要先将数据导出,警告适当的调整重新导入后才可完成。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值