MySQL数据库编码

1 MySQL数据库编码解析

    登录MySQL之后,输入如下命令来查询数据库编码,

						show variables like "char%";

    可得到如下查询结果,
在这里插入图片描述
    查询结果所含信息如下,


        ①character_set_client:utf8,表示MySQL的客户端采用的是utf8编码,即:对于MySQL客户端将要向MySQL服务器端发送过来的SQL请求内容,客户端会采用utf8字符集编码规则进行编码发送。

PS:通常,在命令行窗口(CMD)中进行SQL查询时,如果结果集中包含中文汉字,就会显示乱码,这是由于此时作为MySQL客户端的CMD默认采用GBK编码格式,而MySQL服务器端是以utf8编码格式发送数据,就造成了乱码的出现。

        ②character_set_connection:utf8,表示连接MySQL数据库时采用的是utf8编码格式;
        ③character_set_database:utf8,表示创建MySQL数据库时默认采用utf8编码格式;
        ④character_set_results:utf8,表示数据据库返回给客户端查询结果时采用的编码格式;
        ⑤character_set_server:utf8,表示MySQL服务器安装时采用的默认编码格式,不建议人为修改;
        ⑥character_set_system:utf8,表示数据库系统使用的编码格式,是存储元数据时采用的编码格式,无需设置;
        ⑦character_set_dir:指向字符集安装的目录位置。
    其中,三个系统变量不会影响到是否乱码的问题,包括:character_set_filesystem,character_set_system,character_set_dir,而只需要关注其它几个变量是否符合要求。
在这里插入图片描述


2 SQL查询过程中的编码格式转换

在这里插入图片描述
    如上图所示,由MySQL客户端向MySQL服务器端发送SQL查询请求,并由MySQL服务器端接受请求,返回查询结果。在这个过程中,
在这里插入图片描述

3MySQL字符集和排序规则举例

    以创建数据表为例,需要为每一个新的字段指定字符集和排序规则,如下图所示,
在这里插入图片描述

    其中,
        (1)每一种字符集都对应着一套具体的编码规范,如果在只包含客户端和服务器双方的消息传递过程中,双方采用的字符集不一致,就会造成双方解码失败,造成乱码。
        (2)排序规则指定了在指定字符集下,字符以及序列的排序规则,通常有一些固定的命名规范。以MySQL中的utf8字符集为例,如下图所示,例如:_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary)。
在这里插入图片描述
在这里插入图片描述

4 MySQL的字符集和排序规则

    MySQL中对于字符集的支持细化到4个层次:服务器(Server)、数据库(database)、数据表(table)和数据库连接(connection)。
    而排序规则定义了字符之间如何比较(大小、等值判断)的规则,每一个字符集都需要对应着一组(至少一个)排序规则。这个在3中也已经通过例子进行介绍。

5 MySQL字符集/编码格式的修改

    通过以上的介绍,可以得知:设若MySQL客户端和MySQL服务器端采用的字符集不一致,就会导致乱码问题的出现。
    以CMD窗口为例,倘若通过CMD命令行方式连接MySQL服务器,此时,CMD就成为MySQL服务器的客户端之一,但是CMD默认采用ASCII(中文GBK编码格式),是不可修改的,而如下图所示,此时MySQL服务器端的返回结果集采用的是utf8编码格式,下面尝试进行SQL查询。
在这里插入图片描述
    SQL查询语句为:select * from emp;,查询结果中显示为中文乱码,

在这里插入图片描述

    为了避免遇到中文乱码的情况,就需要对MySQL的编码格式进行修改,主要修改的就是MySQL客户端(character_set_client)、连接(character_set_connection)、结果集(character_set_results)3者的字符集进行设置,设置的方法由以下两种,
        (1)临时性设置,即:只在当前窗口内有效,窗口关闭后再重新打开,编码格式还是原先的utf8编码格式。

	set character_set_XXX = “gbk”;

        (2)永久性设置-修改安装目录下的配置文件my.ini。{51-57行内容}

[client]

port=3306

[mysql]

default-character-set=utf8

    将default-character-set的值修改为utf8或者gbk即可。

6 MySQL在CMD窗口下的乱码问题解决示例

    一般情况下,MySQL的乱码问题只存在于CMD窗口中,原因:在进行JavaWeb项目开发时,Java语言默认支持的就是utf-8编码格式,几乎不会用到GBK编码。
    根据2中SQL查询过程可知,返回到客户端CMD窗口(默认支持GBK编码格式,也无法修改)的数据最终采用的是character_set_results编码格式,那么想要在CMD窗口中不出现乱码,就可以采用临时性的设置,命令如下,

set character_set_results = "gbk";

在这里插入图片描述
    再次执行相同的SQL查询,查询结果如下,中文不乱码。
在这里插入图片描述
    关闭CMD再重新查看时,又变为utf8,则产生中文乱码。
在这里插入图片描述

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是席木木啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值