mysql 编码问题

1、查看MySQL编码


  语法:SHOW VARIABLES LIKE 'char%';


 
  因为当初安装时指定了字符集为UTF8,所以所有的编码都是UTF8。
  

  ● character_set_client:无论客户端传递的是什么编码的数据,服务器都当成该编码来处理,例如该编码为UTF8,那么如果客户端发送过来的数据不是UTF8,那么就会出现乱码; 

  ● character_set_connection:通过该编码与client一致!该编码不会导致乱码!当执行的是查询语句时,客户端发送过来的数据会先转换成connection指定的编码。但只要客户端发送过来的数据与client指定的编码一致,那么转换就不会出现问题; 

  ● character_set_database:数据库默认编码,在创建数据库时,如果没有指定编码,那么默认使用database编码; 

  ● character_set_filesystem:可以理解为文件的最终存储形式,是二进制形式的; 

  ● character_set_server:MySQL服务器默认编码; 

  ● character_set_results:MySQL会把数据转换成该编码后,再发送给客户端,例如该编码为UTF8,那么如果客户端不使用UTF8来解读,那么就会出现乱码,说明客户端必须使用result指定的编码来解码; 

  ● character_set_system:这个值总是utf8,不需要设置,是为存储系统元数据的编码。

  附:元数据就是用来定义数据的数据(data about data ,关于数据的数据)。比如,有一条学生信息记录,其中包括字段姓名(name)、年龄(age)、性别(male)、班级(class)等,那么name、age、male、class就是元数据。


2、控制台编码


  我们使用控制台的时候经常出现乱码问题,例如:

    

  ● 插入或修改时出现乱码:


    这是因为DOS下默认使用GBK,而character_set_client不是GBK的原因。又因为修改DOS的编码不方便,所以我们去设置character_set_client为GBK即可。

    

  ● 查询出的数据为乱码:


    这是因为character_set_results不是GBK,而DOS默认使用GBK的原因。因为修改DOS的编码不方便,所以我们去设置character_set_results为GBK即可。

  我们的DOS系统默认编码是GBK,这是和我们的操作系统相关的,无法改变为UTF8,这就出现一个问题。客户端发送的数据是GBK,而character_set_client为UTF8,这就说明客户端数据到了服务器端后一定会出现乱码。既然不能修改控制台的编码,那么只能修改character_set_client为GBK了。

  服务器发送给客户端的数据编码为character_set_result,它如果是UTF8,那么控制台使用GBK解码也一定会出现乱码。因为无法修改控制台编码,所以只能把character_set_result修改为GBK。

  

  ● 解决方法:


  

但是要注意的是:这种设置编码方式只对当前连接有效,这说明每次登录MySQL提示符后都要去修改这两个编码,但可以通过修改配置文件来处理这一问题:配置文件路径:\MySQL\MySQL Server 5.1\ my.ini,设置:


  原理:在[ client ] 处设置后,实际效果是改变了三处编码,如下:


3、MySQL工具


  当使用MySQL工具,例如SQLyog,是不会出现乱码的,因为它们会每次连接时都会修改character_set_client、character_set_results、character_set_connection的编码。这样对my.ini上的配置覆盖了,也就不会出现乱码了。


  小结:了解各种编码的意义是解决mysql编码的关键。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值