具体问题如标题所示。mysql版本为5.5.
在mysql控制台对数据库操作,中文显示正常。通过navicat,netbeans,以及mysql workbench上对数据库操作,中文显示都是正常的。
在..\MySQL\MySQL Server 5.5路径下的my-template.ini中的[MySql]和[Mysqld]里面都已经添加了default-character-set=gb2312。在php代码里面也加入了mysql_query("set names 'gb2312'");也在使用数据库时输入了alter database charset = gb2312;
但是,最后,在页面上显示的中文还是乱码。WHY??请高人指点。不胜感激!
在mysql控制台对数据库操作,中文显示正常。通过navicat,netbeans,以及mysql workbench上对数据库操作,中文显示都是正常的。
在..\MySQL\MySQL Server 5.5路径下的my-template.ini中的[MySql]和[Mysqld]里面都已经添加了default-character-set=gb2312。在php代码里面也加入了mysql_query("set names 'gb2312'");也在使用数据库时输入了alter database charset = gb2312;
但是,最后,在页面上显示的中文还是乱码。WHY??请高人指点。不胜感激!
解决方案 »
- mysql命令问题
- 求一条 distinct group by 语句
- 不知道是否mysql约束能实现这个功能?
- 邮箱数据库
- 请高手指教:Can not issue data manipulation statement with executeQuery().我用的是MySQL4.1,mysql-connector-java-3.1.14,Tomcat5.0
- 请教:如何实现类似google的多关键词查询(多关键词用空格或其它符号间隔),并求最高效率
- varchar和char的问题
- 各位高手,推荐几本Mysql的经典书籍,急!
- TPCC-MySQL 运行时报错:Segmentation fault
- mysql 存储过程使用dbforge 跟踪debug ,多了很多CALL cr_debug.UPDATE_WATCH,如何去掉
- mysql 数据库操作问题
- mysql如何对存储过程加密
还有你建的那个数据库编码也要相应的改
这是我建表的sql:
CREATE TABLE wishes(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
wisher_id INT NOT NULL,
description CHAR(255) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL,
due_date DATE,
FOREIGN KEY (wisher_id) REFERENCES wishers(id)
);另外<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />也是加在了html文件中的。除了gb2312外,gbk和utf8都用过了。都不行。
mysql> select * from wishes;
+----+-----------+-------------+------------+
| id | wisher_id | description | due_date |
+----+-----------+-------------+------------+
| 1 | 1 | Sausage | 2008-04-01 |
| 2 | 1 | Icecream | NULL |
| 3 | 2 | Cheese | 2008-05-01 |
| 4 | 2 | 铚$儧 | NULL |
+----+-----------+-------------+------------+
4 rows in set (0.00 sec)
然后我更改了控制台属性字体为新宋体,结果如下:mysql> select * from wishes;
+----+-----------+-------------+------------+
| id | wisher_id | description | due_date |
+----+-----------+-------------+------------+
| 1 | 1 | Sausage | 2008-04-01 |
| 2 | 1 | Icecream | NULL |
| 3 | 2 | Cheese | 2008-05-01 |
| 4 | 2 | 铚$儧 | NULL |
+----+-----------+-------------+------------+
4 rows in set (0.00 sec)mysql> set names gb2312;
Query OK, 0 rows affected (0.00 sec)mysql> select * from wishes;
+----+-----------+-------------+------------+
| id | wisher_id | description | due_date |
+----+-----------+-------------+------------+
| 1 | 1 | Sausage | 2008-04-01 |
| 2 | 1 | Icecream | NULL |
| 3 | 2 | Cheese | 2008-05-01 |
| 4 | 2 | 蜡烛 | NULL |
+----+-----------+-------------+------------+
4 rows in set (0.00 sec)
还有,用navicat看了一下,表的编码是gb2312.
show creat table tbname看看
MySQL 中文显示乱码
我不是很懂这个字符集的东西。但是这些我基本都看过了。在安装mysql server时,我选择的默认字符集是gbk,因此,在my.ini中肯定设置的是default-character-set=gbk。在用netbeans进行php编程时,选择的默认字符集也是gbk。在php中访问数据库时,也加入了mysql_query("set names gbk");结果在网页上打开后,从数据库读出的中文还是乱码。但是静态的中文显示就是正常的。所以问题还是出在php访问数据库上。
另外,不论是mysql控制台,还是用navicat,显示数据库中的中文都是正常的。
mysql> show variables like 'char%';
+--------------------------+------------------
-----+
| Variable_name | Value
|
+--------------------------+------------------
-----+
| character_set_client | gbk
|
| character_set_connection | gbk
|
| character_set_database | gbk
|
| character_set_filesystem | binary
|
| character_set_results | gbk
|
| character_set_server | gbk
|
| character_set_system | utf8
|
| character_sets_dir | D:\Program Files\
ets\ |
+--------------------------+------------------
通过控制台运行php代码访问同一个数据库返回的结果在控制台中中文显示也是正常的。现在就只有在浏览器中显示的中文是乱码了。
我尝试了一下用在网页文件的php代码里对数据库进行插入操作,发现数据库中中文完全正常。
然后我又用自己修改后的简单一些的php访问数据库的代码代替了原来的网页文件的php代码,发现中文显示居然正常了!!
我猜测应该是原来php代码中关于网页显示的部分有问题,而不是php访问数据库出的问题。
最后发现,在网页中显示时,绘制了一个表格,利用了htmlentities()函数,但是这个函数只输入了第一个参数,后面关于字符集设定的参数由于是可选的,就没有输入,但是这个参数默认的是ISO-8859-1 - 默认。西欧。
可想而知,中文显示肯定会出问题。
我把字符集参数修改为gbk,发现还是不行,会报错。然后又改成gb2312.中文显示就不再是乱码了!!再次感谢各问大侠的热心帮助哈!!