谈谈MySQL乱码和set names

SET NAMES utf8
相当于
SET character_set_client = utf8 用来设置客户端送给MySQL服务器的数据的 字符集
SET character_set_results = utf8 服务器返回查询结果时使用的字符集
SET character_set_connection = utf8 MySQL 服务器把客户端传来的数据,从character_set_client字符集转换成character_set_connection字符集


比如我们可以设置
SET character_set_client = gbk
SET character_set_results = gbk

SET character_set_connection = utf8

这样数据在 MySQL内部的存储表示 为 utf8 字符集,而 与 客户端交互时,使用gbk字符集合
另外:
如果CREATE TABLE中没有明确指出字符集和collation,那么全局的 database字符集和collation将做为该表的字符集和collation值。现在很多虚拟主机管理员将其设置为utf8。默认的database的字符集和collation可以通过系统变量character_set_database和collation_database查看。服务器当默认database改变时设置这些变量的值。如果没有默认的database,这些变量的将与对应的服务器级的系统变量character_set_server和collation_server的值相同。
 
查看MySQL字符集设置情况:

mysql> show variables like ‘%char%’;
+————————–+—————————————-+
| Variable_name            | Value                                  |
+————————–+—————————————-+
| character_set_client | gbk |
| character_set_connection | gbk                                    |
| character_set_database   | gbk                                    |
| character_set_filesystem | binary                                 |
| character_set_results    | gbk                                    |
| character_set_server     | gbk                                    |
| character_set_system     | utf8                                   |
      | /usr/local/mysql/share/mysql/charsets/ |
+————————–+—————————————-+

  在查询结果中可以看到mysql 数据库系统中客户端、数据库连接、数据库、文件系统、查询结果、服务器、系统的字符集设置在这里,文件系统字符集是固定的,系统、服务器的字符集在安装时确定,与乱码问题无关。乱码的问题与客户端、数据库连接、数据库、查询结果的字符集设置有关。

 
 
       在登录数据库时,我们用mysql –default-character-set=字符集-u root -p 进行连接,这时我们
再用show variables like ‘%char%’;命令查看字符集设置情况,可以发现客户端、数据库连接、
查询结果的字符集已经设置成登录时选择的字符集了
如果是已经登录了,可以使用set names 字符集;命令来实现上述效果,等同于下面的命令:
set character_set_client = 字符集
set character_set_connection = 字符集
set character_set_results = 字符集
如果是通过JDBC 连接数据库,可以这样写URL:
URL=jdbc:mysql://localhost:3306/abs?useUnicode=true&characterEncoding=字符集
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值