问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用php将中文写入mysql,在phpmyadmin中查看显示为乱码,求解决方法!!

发布网友 发布时间:2022-04-08 06:37

我来回答

4个回答

懂视网 时间:2022-04-08 10:59

  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的手册就好了

技术分享

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

技术分享

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

然后新建一个表:

技术分享

同样也不选择编码方式

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

技术分享

就会出现乱码了:

技术分享技术分享

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

技术分享

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

我们改掉这个编码:

技术分享

再插入一条中文的记录:

技术分享

可以看到解决了。

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

技术分享

重新建立一个表testtable2:

技术分享

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

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

技术分享

 

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

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

标签:

热心网友 时间:2022-04-08 08:07

在命令行添加的时候,如果是Windows系统,默认是GBK的,所以你先在命令行里面执行一句 set names utf8;
再添加,这样,在phpmyadmin中看就不是乱码了。
多学点编码的知识。

热心网友 时间:2022-04-08 09:25

查看一下数据库的数据类型是不是UTF类型的。可能是数据库的类型和传入数据的类型不匹配所以显示为乱码

热心网友 时间:2022-04-08 10:59

mysql>set names gbk;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 手绘房屋户型图怎样画,求指教... 外地户口可以在青海互助申请公租房吗 外地户口能申请公租房吗? 外地工作如何申啨户藉地公租房? 周公解梦 考生梦见负重爬坡 我们都是婚外情,为什么他当着老婆的面给我发微信还语音,他是真的爱我吗? 冰箱冷藏放的东西多,被卡住 了,打不开了,咋办!!! 老婆和我赌气就不想和我说话,但是我下班去接她发她微信她还是回一些简短的文字,在家里面怎么哄她她都觉 老婆生气了哄她微信也不说话? 每次和老婆微信聊天或开视频聊天,每次对我都没有好口气好的态度,感觉直接对我正面冲突,哎,这是为什么 微信和老婆语音怎么显示别人名字,别人能听到吗? 给老婆微信语音一直是忙线中是怎么回事 我老婆怎么会有我逗其她女孩的微信语音 女人被男人追的时候是不是特别舒服,越久越舒服 怎么哄女朋友开心?因为异地恋,我只能和她发微信,请问:怎么用语音哄女朋友开心? 如何让男人在床上满足自己的欲望,并让男人自己也很爽? 戚继光,俞大猷,邓世昌,刘步蟾的资料。急急急(格式如下) 昨天晚上我男朋友干了我一夜了,我走路都好痛,现在他还想,我该怎么办_百度问一问 邓世昌是谁。要详细的 请问近代日本的东乡平八郎和伊东祐亨比起中国邓世昌刘步蟾怎么样? 做梦见向亲戚借钱钱没借着把两个水桶拿去了 梦到自己向别人借钱,别人却只把自己身上一半的钱借给自己,会预示着什么? dessert沙漠的读音是什么? deserve doing,deserve to do怎么用 为什么desert跟deserve的首读音不一样?就是这2个单词里“de”的读音,后面都是ser book与reserve作为“预订”时,怎样区分? it serves you right是什么意思 英语转化词有哪些 护士的英语发音怎么读 英语中怎么根据读音记单词? 如和记住英文单词? 如何,快速记忆?(如背单词)拜托各位大神 be worthwhile doing 还是to do 还有相关的worth worthy 的用法 你的phpmyadmin中文乱码怎么解决的,请教了,谢谢 “青”加上偏旁可以组成哪些词语? 青加偏旁组成新字有哪些? 青字加偏旁组词 青如何加偏旁后再组一个词? 青加偏旁组字并组词 以青加偏旁组字