今夜IT网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 378|回复: 0

MySQL的几个character_set变量的说明

[复制链接]

68

主题

68

帖子

312

积分

骑士

积分
312
发表于 2017-5-5 16:37:27 | 显示全部楼层 |阅读模式
MySQL关于character有如下8个变量:
character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server
character_set_system
character_sets_dir
结论:
    character_set_clientcharacter_set_connectioncharacter_set_results3个参数值是由客户端每次连接进来设置的,和服务器端没关系。
    我们登陆进mysql后,执行 set names utf8; 实际就是同时修改上面的这3个参数值的。
环境:
    CentOS6.7x86_64
    Percona Server 5.7 (server段设置的是character-set-server= utf8)
Windows上使用CMD命令行去连接node1,如下图:
在Windows上使用SQLyog命令行去连接node1,如下图:
可以看到2个工具连接到同一个服务器上,显示出的参数却不一样的。
从官方文档中可以看出character_set_connection、character_set_client、character_set_results三个字符集什么时候用到。
从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_clientcharacter_set_connectioncharacter_set_results这三个值。如cmd是用gbk,而SQLyog是用utf8.
如果我们想告诉mysql server自己本次连接想使用latin1,则命令行下可以如下写法:
mysql -uroot -h 192.168.2.11 -pAbcd@1234 --default-character-set=latin1
此外,要修改上面的3个字符集的话,
还可以在my.cnf的[mysql]段里面增加:
default-character-set=latin1
也可以登录进去后,执行set names latin1的效果相同。
其他几个参数:
character_set_database
这个是当前所在的数据库字符集。如果没有切换到其他数据库,则character_set_database显示的和character_set_server一致。
例:切换到一个默认是gbk的数据库里,执行showvariables like 'character_set_database';看到的就是gbk
character_set_filesystem
把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem,默认binary是不做任何转换的
character_set_system
character_set_system是个只读数据不能更改。也没多少改的意义,他是元数据的编码,相信不会有人用中文做数据库名和字段名之类的吧,这个字段和具体存储的数据无关。
character_sets_dir
不清楚、。。。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 官方QQ群

QQ|小黑屋|手机版|今夜IT网 (京ICP备11034012号) 

Powered by Discuz! X3.2

快速回复 返回顶部 返回列表