mysql中文乱码问题,phpmyadmin操作解决方法

mysql中文乱码问题,phpmyadmin操作解决方法

  mysql中文乱码问题一直每次迁移一次数据库就要从头解决一遍,因为数据库建好以后就不会怎么动了,一直没当回事儿,反正就麻烦一次吗。最近服务器遇到了点问题,重装了几次,结果每次都要重新配置这个问题,索性就总结一下。

 

  首先中文乱码的根本问题就是编码问题:我们把中文输入到数据库中再从数据库中取出来显式在浏览器上分为几个过程,这些过程中要求每一个处理过程的编码都是要支持中文的,而且如果前后两个过程如果编码方式不一样的话,必须要有转码的手段。比如说你用gbk的编码方式在本地写好了一段中文,或者说是.sql脚本,上传服务器后执行,如果你的mysql默认以utf8的编码读取你的sql语句的话,那么中文就是乱码了。(没有测试过,说不准gbk和utf8是兼容的或者是mysql默认会通过unicode转码。不过大致就是这个意思)。可以想象如果所有的过程之间都要检查编码问题是非常繁琐的,所以最好的解决方案,就是选择一种编码,然后在所有的过程中都使用这种编码,这样就不用担心编码转换问题了。

  然后说一下mysql中关于编码的规则,mysql中对每个数据库,每个数据库中的每个表,每个表中的每个字段都有关于编码的设置变量,(记得好像是可以在mysql中用sql语句:show variables like “%char%”)查到。这些变量的优先级是从小到大排列的。也就是说如果你设置一个testdb数据库的默认编码是latin的,那么在你新建一个表(不声明编码方式)以后,这个表的所有字段的编码都是latin的,但是你可以新建一个其他编码方式(比如说utf8)的表,做法就是在建表的时候显式的声明用的是什么编码。这样就可以再一个数据库中同时存在latin编码的和utf8编码方式的表了。同样的规则也可以应用在表和表中的字段上。

  最开始就是这里耽误了很长时间,因为自己明明已经把数据库的编码方式改为utf8的了,但还是显示乱码,一直以为是哪里编码不统一,检查了好几遍。问题是因为这个表是在修改数据库默认编码之前建立的,所以这个表的默认编码还是latin的,同样这个表中的字段也是默认为latin的。所以除了需要修改数据库的默认编码以外还需要修改表的默认编码,然后还需要修改字段的默认编码。当然如果你的数据库中只有一个表是需要中文的,那么你只要在建立表的时候修改它的默认编码就好了。但是如果你先建立的这个表再去修改表的默认编码是没有用的,因为表中的字段的编码是根据表建立的时候所确定的。所以说对于已经建立好的表,想要修改其中字段的编码不仅需要修改表的默认编码,还需要修改具体字段的编码。

  这里我用phpmyadmin作为例子来说明一下对于已经建立好的表怎么让其支持中文:

在phpmyadmin中,“默认排序方式”就是默认编码的意思,我也不知道为什么这么说。。。

首先我们看到mysql的默认编码是什么,关于编码有好几个变量,每个变量负责的功能不一样,具体的介绍点击那个问号就可以有mysql的官方解释了,或者自己去查一下mysql的手册就好了

mysql中文乱码问题,phpmyadmin操作解决方法

在这种默认编码的情况下我们新建一个数据库test:

mysql中文乱码问题,phpmyadmin操作解决方法

我们这里不选择编码方式也就是“排序规则”

然后新建一个表:

mysql中文乱码问题,phpmyadmin操作解决方法

同样也不选择编码方式

然后插入一条有中文的记录:

mysql中文乱码问题,phpmyadmin操作解决方法

就会出现乱码了:

mysql中文乱码问题,phpmyadmin操作解决方法mysql中文乱码问题,phpmyadmin操作解决方法

原因是默认情况下name字段的编码是这种:

mysql中文乱码问题,phpmyadmin操作解决方法

我也不清楚为什么从latin1变成了cp1250_bin可能是mysql中其他的设置里有规定吧。。。。。。

我们改掉这个编码:

mysql中文乱码问题,phpmyadmin操作解决方法

再插入一条中文的记录:

mysql中文乱码问题,phpmyadmin操作解决方法

可以看到解决了。

现在我们换个思路:改掉test数据库的默认编码:

mysql中文乱码问题,phpmyadmin操作解决方法

重新建立一个表testtable2:

mysql中文乱码问题,phpmyadmin操作解决方法

可以看到这个testtable2的编码已经变成utf8的了。

同样插入一条中文记录,可以看到问题也解决了:

mysql中文乱码问题,phpmyadmin操作解决方法

 

总结一下吧:虽然现在很多数据库管理工具都可以支持边开发,边修改数据库。但是在新建数据库的时候还是应该大致思考一下数据库的性质,表之间的依赖关系等等。否则以调试程序的方式来调试数据库效率太低。

转载于:https://www.cnblogs.com/daretobe/p/4711067.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109372.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html邮件签名制作,制作自己的个性化电子邮件签名[通俗易懂]

    html邮件签名制作,制作自己的个性化电子邮件签名[通俗易懂]制作自己的个性化电子邮件签名您是不是经常给朋友发E-mail?如果每个邮件中都有一个精美的签名文件,文件中包括通讯地址、邮政编码以及电话、手机、QQ号码等联系方法,甚至可以包含简单的声音文件,并且每次在OutlookExpress中新建邮件时,可以自动签名——岂不很美?我们就一起来制作这样一个签名文件。1、启动OE,单击工具栏“新邮件”按钮,打开“新邮件”窗口。输入签名内容,包括通讯地址、电话…

    2022年10月9日
    4
  • Linux nmap命令整理

    Linux nmap命令整理nmap–iflist:查看本地主机的接口信息和路由信息-A:选项用于使用进攻性方式扫描-T4:指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,在网络通讯状况较好的情况下推荐使用T4-oXtest.xml:将扫描结果生成test.xml文件,如果中断,则结果打不开-oAtest.xml:将扫描结果生成test.xml文件,中断后,结果也可保存-oGtest.txt:将扫描结果生成test…

    2022年5月28日
    44
  • 【2021-01-05】JS逆向之B站模拟登入(含极验点选)「建议收藏」

    【2021-01-05】JS逆向之B站模拟登入(含极验点选)「建议收藏」文章目录前言一、预告无感滑块点选前言搞了不到两个星期,终于把某验验证码(无感、滑块、点选)全部给啃下来了,过程还是挺艰辛的,这篇不讲方法,之后会出一系列的方法,感兴趣的可以提前关注下~一、预告无感滑块点选…

    2025年10月26日
    3
  • 用Java IO流实现下载文件

    用Java IO流实现下载文件  @RequestMapping(value="download")   publicStringdownload(HttpServletResponseresponse,Modelmodel){             //通过文件名找出文件的所在目录      StringURL="D:/one/two.txt";      //得到要下载的文件…

    2022年5月30日
    49
  • Xshell如何修改字体大小和颜色

    Xshell如何修改字体大小和颜色

    2021年10月18日
    59
  • cmd命令如何切换盘符_请输入windows所在盘符

    cmd命令如何切换盘符_请输入windows所在盘符MS-DOS(/ˌɛmˌɛsˈdɒs/MicrosoftDiskOperatingSystem)isanoperatingsystemforx86-basedpersonalcomputersmostlydevelopedbyMicrosoft.1.开始->运行->cmd->Enter2.切换到D盘3.切换到E盘4.切换到C盘5.退出cmdhttps://yongqiang.blog.csdn.net/…

    2022年10月3日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号