最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL教程之中文数据问题

来源:懂视网 责编:小采 时间:2020-11-09 08:41:01
文档

MySQL教程之中文数据问题

MySQL教程之中文数据问题:本篇文章主要给大家介绍mysql中文数据的相关问题,希望对需要的朋友有所帮助!推荐参考教程:《mysql教程》中文数据问题中文数据问题的本质就是字符集的问题。由于计算机仅识别二进制数据,而且人类则更倾向于识别字符(符号),因此就需要一个二进制与字符的
推荐度:
导读MySQL教程之中文数据问题:本篇文章主要给大家介绍mysql中文数据的相关问题,希望对需要的朋友有所帮助!推荐参考教程:《mysql教程》中文数据问题中文数据问题的本质就是字符集的问题。由于计算机仅识别二进制数据,而且人类则更倾向于识别字符(符号),因此就需要一个二进制与字符的

本篇文章主要给大家介绍mysql中文数据的相关问题,希望对需要的朋友有所帮助!

推荐参考教程:《mysql教程》

中文数据问题

中文数据问题的本质就是字符集的问题。

由于计算机仅识别二进制数据,而且人类则更倾向于识别字符(符号),因此就需要一个二进制与字符的对应关系,也就是字符集。

在咱们通过 MySQL 数据库的客户端向服务器插入中文数据的时候,有可能失败,原因则可能是客户端和服务器的字符集设置不同导致的,例如:

  • 客户端的字符集为gbk,则一个中文字符,对应两个字节;

  • 服务器的字符集为utf8,则一个中文字符,对应三个字节。

  • 这样显然会在编码转换的过程中出现问题,从而导致插入中文数据失败。

    由于所有的数据库服务器表现的一些特性都是通过服务器端的变量来保持的,因此系统会先读取自己的变量,看看具体的表现形式。这样的话,咱们就可以通过以下语句查看服务器到底识别哪些字符集:

    -- 查看服务器识别的全部字符集show character set;

    1

    通过以上查询,咱们会发现:服务器是万能的,其支持所有字符集。

    既然服务器支持这么多字符集,总会有一种是服务器默认的和客户端打交道的字符集。因此,咱们可以通过以下语句查看服务器默认的对外处理的字符集:

    -- 查看服务器默认的对外处理的字符集show variables like 'character_set%';

    5

  • 标注1:服务器默认的客户端传来的数据字符集为utf8

  • 标注2:连接层字符集为utf8

  • 标注3:当前数据库的字符集为utf8

  • 标注4:服务器默认的对外处理的字符集utf8.

  • 通过以上查询,咱们会发现:服务器默认的对外处理的字符集是utf8.

    那么反过来,咱们在通过客户端的属性查看客户端支持的字符集:

    3

    显然,咱们已经找到了问题的根源,确实是:客户端支持的字符集为gbk,而服务器默认的对外处理的字符集为utf8,因此产生矛盾。

    既然问题已经找到了,那么解决方案就是:修改服务器默认接收的字符集为gbk.

    -- 修改服务器默认接收的字符集为 GBK(不区分大小写)set character_set_client = gbk;

    这样的话,咱们再插入中文数据的时候,就会插入成功啦!But,在咱们查看数据的时候,又发现了一个问题,就是之前咱们插入的中文数据显示乱码啦!不过这也正常,因为查询的时候,数据的来源是服务器(utf8),解析数据的是客户端,而客户端仅识别gbk格式的数据,显示乱码也就在意料之中啦!

    因此,解决方案就是:修改服务器给客户端的数据字符集为gbk.

    -- 修改服务器给客户端的数据字符集为 GBK(不区分大小写)set character_set_results = gbk;

    4

    如上图所示,向服务器插入中文数据的问题已经解决啦!

    此外,咱们之前使用的 SQL 语句:

    -- 修改的只是会话级别,即当前客户端当次连接有效,关闭后失效set 变量 = 值;

    这样的话,每当咱们重启客户端的时候,都要依次重新进行设置,比较麻烦,因此咱们可以使用快捷的设置方式,即:

    set names 字符集;

    例如,

    /**
    * 恒等于 set character_set_client = gbk;
    * 恒等于 set character_set_results = gbk;
    * 恒等于 set character_set_connection = gbk;
    */set names gbk;

    表示上述一条语句,将同时改变三个变量的值。其中,connection为连接层,是字符集转换的中间者,如果其和clientresults的字符集一致,则效率更高,不一致也没有关系。

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    MySQL教程之中文数据问题

    MySQL教程之中文数据问题:本篇文章主要给大家介绍mysql中文数据的相关问题,希望对需要的朋友有所帮助!推荐参考教程:《mysql教程》中文数据问题中文数据问题的本质就是字符集的问题。由于计算机仅识别二进制数据,而且人类则更倾向于识别字符(符号),因此就需要一个二进制与字符的
    推荐度:
    标签: 数据 中文 教程
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top