我的phpMyadmin乱码问题解决方案

来源:互联网 发布:淘宝哪家化妆品是正品 编辑:程序博客网 时间:2024/06/06 17:23

今天我的程序留言板出问题了,具体的情况是:程序在我的本地电脑上本地的数据库上都好使,一上传到网上就不对了,包括查询和插入数据都是乱码。 我首先检查了一下程序,发现各个地方的程序都没有异常,编码方式都是同一采取的utf8,数据库中的编码方式都是统一的utf8,数据库中的字段也是统一了,然后我又先对比了一下服务器和自己的机器的程序,把自己机器的程序传到网上后发现还是一样,初步判定乱码问题跟程序的转码没关系,因为程序都一样了,只有数据库不一样,把自己机器上的程序的数据源配置到phpMyadmin上后发现,程序也出现了乱码,我觉得问题的根源可能在phpMyadmin上,大家应该都知道程序出现乱码的原因有很多,大部分都是程序的转码方式不对,或忘记转码。这种在所有情况下都正确时,还有乱码,我就把每次存数据库之前和从数据库中取数据之前的数据都打印出来,发现:存入数据库之前数据就都是正确的,但存入后检查数据库发现数据都是乱码。取出数据后还是乱码,所以我觉得问题的根源在数据在网上的传输过程中出了问题。 我又把从数据库中查出来的数据转码,使用new String(str.getBytes("iso8859-1"),"utf-8");结果输出的就不是乱码,我大致猜测网络传输中采用的iso8859-1的方式。当时很纳闷,就用SHOW VARIABLES LIKE 'character_set_%';查看了一下数据库的编码方式,一看才知道,原来数据库的character_set_client使用的编码方式是latin1,这样的话,我的程序出现乱码就很正常了,因为虽然我的客户端采用的编码方式都是utf8,但跟服务器交互时都是采用latin1编码,所以经过传递之后数据的编码都变成了latin1编码的了。使用这种转换的方式使从数据库中查询数据好使了,但往数据库中存储数据的话还不好使,因为在服务器端的数据正常,传到phpMyadmin上之后,仍然是iso8859-1的,存入还是乱码,因为不能在数据存入之前在数据库的服务器上进行转码。 这就得再考虑其他的方法,考虑过使用修改phpMyadmin编码方式的方法改变编码,就是使用命令行的方式: SET character_set_client='utf8'。结果修改完之后在查询数据库的编码方式,还是latin1,这就比较奇怪了,应该能改的。去网上一查才发现原来通过SET character_set_client='utf8'的方式只能改变一次回话的编码方式,不能改变全局,要想改变全局的编码方式,还得使用:SET global character_set_client='utf8'。但我没法使用,因为在别人的服务器上,不可能因为我的原因改变所有人的默认编码方式。 最终无奈之下,只有采取终极手段了,呵呵,把数据库中的数据类型改为latin1,把相应的字段也改为latin1。然后每次获取和存储的时候都进行转码。就是转换成latin1的编码后再传,取出来的时候转换成latin1的格式再显示。这样问题就解决了。虽然麻烦点,但是没办法,大家谁还有好的办法一定要告诉我一声啊。 俗套的总结一下吧,首先牢骚一下,乱码问题真是头疼啊。经过这次,我总结出来了,解决乱码问题无非就是把你往数据库里存的数据和取出来的数据编码一致就可以,只要实现这么简单的一点,不用记这么多方法,只要记住这个目的,就OK了。其实细想想以前的这些编码方式无非也是实现这个。 好了,编码问题先到这,有谁有好的方法或建议尽管提啊。

原创粉丝点击