MYSQL的字符集——字符集和校对规则

1.什么叫做字符集
字符集就是一套符号和字符编码的集合。
2.
什么叫做校对规则
校对规则就是在字符集内用于比较字符的一套规则。

MYSQL5.1数据库可以做到
·  
使用多种字符集来存储字符串
·  
使用多种校对规则来比较字符串
·  
在同一台服务器、同一个数据库或甚至在同一个表中使用不同字符集或校对规则来混合字符串
·  
允许定义任何级别的字符集和校对规则

MYSQL能定义下面4种级别的字符集和校对规则:
1.
服务器级别的字符集和校对规则
设置方法:mysqld --default-character-set=latin1 --default-collation=latin1_swedish_ci

2.
数据库级别的字符集和校对规则
设置方法:建立库时:CREATE DATABASE db_name DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
修改库时:ALTER DATABASE db_name DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

3.
表级别的字符集和校对规则
设置方法:
建表: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]

4.
列级别的字符集和校对规则
设置方法:col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name [COLLATE collation_name]]


连接字符集和校对规则
整个连接过程包括2个阶段,客户端发送请求,服务器端响应请求。其中涉及了3种连接过程中的字符集和校对规则:
1.
当从客户端发送给服务器端的请求属于哪种字符集和校对规则
设置方法:SET character_set_client = x;
2.
服务端收到请求后,应该将请求转换为哪种字符集和校对规则
设置方法:SET character_set_results = x;
3.
服务端发送结果集或者错误信息给客户端用哪种字符集和校对规则
设置方法:SET character_set_connection = x;

综合设置方式:SET NAMES 'x'
这个语句等价于上面3条语句的集合,也就是3中情况都使用相同的字符集的时候,可以用这一句代替上面3句。


这样大家应该对字符集和校对规则有些了解了吧。
我来解释一下大家为什么会出现乱码的问题。其实也就是3个连接过程中的字符集和校对规则设定不匹配。
例如:数据库定义的字符集为GB2312,可是页面要求显示utf-8的,那么光配置SET NAMES 'utf8'是不能解决问题的。首先从页面将utf-8的数据传给程序,程序拿到以后就要使用utf-8的字符集将数据发送给服务器端。那么就要设置SET character_set_client = ‘utf8’;服务器端要使用GB2312的字符集存储数据或者读取数据,那么就要设置SET character_set_results = ‘GB2312’;之后服务器端再用utf8的字符集将数据返回到客户端,就要设置SET character_set_connection = ‘utf8’;这样就不会出现乱码了。
注:html页面上使用的编码为"utf-8",一般程序中使用的'utf8',这两个写法略有区别。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值