最近做一个聊天的项目,用了jaxl来让xmpp server转发消息给web server.然后webserver会保存消息到本地数据库(mysql).
发现mysql中中文为乱码.解决思路:
1.首先检查了自己生成数据库(和table)的脚本中有没有做utf8的设置(通过).
2.yii框架的配置文件中,关于数据库配置有没有 'charset' => 'utf8', (通过).
3.查看mysql 数据库编码方式:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
于是乎将其改为:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
问题依然存在,这时我想可能是数据写入的时候,就将乱码写入了.也就是说是php(jaxl是php写的)往mysql写数据时有问题.
4.在jaxl中php往jaxl写数据的代码前加入: mysql_query("SET NAMES 'utf8'");
这样,便将php默认字符集设置为utf8(一定要注意,这里是utf8,而不是utf-8).
好的,问题解决...
补充:
最近两天又研究下了这个问题,做一个补充.
上面提到的在每次读写数据时添加mysql_query("SET NAMES 'utf8'");
的方法不是很理想,因为我不想每次都添加.也有人提供了一个好办法,用OOP来编写php程序,将数据库读写查询写成一个类,这样就方便多了.
其实,这里还有一个办法可以更加优雅的解决这个问题:修改mysql的配置文件my.cnf
(ubuntu下,my.cnf文件的位置:/etc/mysql/my.cnf)
我们只需要在[mysqld] 下添加
init-connect='SET NAMES utf8'
即可.
--------------------------------------
这儿有人提供了一个utf8和my.cnf的配置,非常有用
from:http://notes.timeghost.net/2008/10/utf-8-and-mycnf.html
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8
分享到:
相关推荐
PHP与MySQL Web应用平台中文乱码问题研究.pdf
大家在使用PHPmyadmin把mysql数据库导出导入的时候都遇到过中文乱码的问题,尤其是网站迁移的过程中,只有把这个中文乱码的问题解决好了,你才能把mysql数据库玩熟玩好。
1.2.6 创建存放两个 mysql 实例的数据目录...............................................................11 1.2.7 创建两个 mysql 多实例的配置文件.............................................................
本文实例总结了PHP+MySQL存储数据常见中文乱码问题。分享给大家供大家参考,具体如下: PHP+MySQL出现中文乱码的常见原因: 1. MYSQL数据库的编码是utf8,与PHP网页的编码格式不一致,就会造成MYSQL中的中文乱码。 2. ...
解决方法:创建数据库的时候,MySQL 字符集选择’UTF8’,MySQL 连接校对选择utf8_general_ci,这样创建的数据库用来存储中文肯定没有问题,否则,你的中文首先在MySQL中就是乱码,更不要期望它会给你在PHP页面中...
基于mysql php程序开发的中文乱码问题及对策分析.pdf
乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了?号。 症状:用PHPmyAdmin输入汉字正常,但当PHP网页显示MySQL数据时汉字就变成了?号,并且有多少个汉字就有多少...
在原faisunSQL 4.0的基础上,针对数据备份过程中出现乱码的问题,做了优化. 增强的功能: 1.自动识别数据库版本,对于MySQL 4.1以上,备份数据时提示选择字符集. 2.导入数据时,提示原数据库编码,并自动识别. 3.增加...
经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧
重装了系统重新安装了PHP的运行环境,也没注意太多,想写点东西复习复习……当我用INSERT INTO想数据表里添加数据的时候,发现数据只要是中文的都是以乱码显示的,于是我在网页中规定了语言为gbk发现还是不行,在...
从 http://download.csdn.net/detail/esr2587758/2121033 这里下载后,发现代码有兼容问题和中文乱码问题。 于是修复了兼容问题和编码问题,亲自测试,已经可以正常使用。使用环境: windows 7 php 5.4 mysql 5.1 ...
02-MySQL数据乱码及多种解决方案实战2.avi 03-MySQL不乱码5种方法及不乱码根源深入详解.avi 04-下节内容及课后作业说明.avi 05-课前思想-17期学生23万入职BAT公司 06-课前思想-及课前考试题说明.avi 07-MySQL字符集...
PHP MySQL程序开发中的乱码产生原因及解决方案分析.pdf
在phpMyAdmin2.6以上版本因为支持多语言集,弄得我们使用phpMyAdmin管理数据库的时候,查询出来的中文都是乱码,但是在我们的PHP程序调用时却没有这些问题。 去phpMyAdmin2.6的根目录下,打开以下这个文件: ...
第一种方法,很精辟的总结: 经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧: WINDOWS 下导入应该这样 使用MYSQL的命令 ...
打算切换某个网站的主机,没想到遇到Php和Mysql中文乱码的问题。 以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是...
php写入mysql出现中文乱码的解决办法是:在建立数据库连接之后,将该连接的编码方式改为中文。 代码如下: $linkID=@mysql_connect(localhost,root,admin); if(!$linkID) { echo 数据库连接失败!; } echo 数据库...
打算切换某个网站的主机,没想到遇到Php和Mysql中文乱码的问题。 以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是...