PHP连MYSQL输出中文乱码

alan99 2010-04-21 10:45:23

我租用的虚拟主机,现在的服务器信息如下:
MY SQL服务器: 版本为5.0.22, Linux
PHP网站空间: win2k

我连之前的一个4.0版本的MY SQL(基于WIN)没有问题. 后来把数据库导到现在的基于LINUX的MY SQL服务器后,在PHPMYADMIN下查询数据库中文一切正常, 但在网站页面中输出中文却是乱码. 搞了一天不知道什么原因, 试了网上很多方法也没成功. 下面是一些字符集信息, 请大家帮我看看是什么原因. 谢谢!

在PHP程序中已经使用了mysql_query( "SET NAMES 'utf8'" );

mysql>SHOW CREATE TABLE my_menu
====================
CREATE TABLE `my_menu` (\n `menuid` int(12) NOT NULL auto_increment,\n `pid` int(6) default NULL,\n `menu` varchar(50) collate utf8_unicode_ci default NULL,\n `coltype` varchar(30) collate utf8_unicode_ci NOT NULL default '',\n `url` varchar(200) collate utf8_unicode_ci default NULL,\n `fold` varchar(50) collate utf8_unicode_ci NOT NULL default '',\n `pub` varchar(50) collate utf8_unicode_ci default NULL,\n `ifshow` int(1) default NULL,\n `moveable` int(1) default NULL,\n `xuhao` int(4) default NULL,\n `target` varchar(10) collate utf8_unicode_ci default NULL,\n `openindex` int(1) NOT NULL default '0',\n `secure` int(1) NOT NULL default '0',\n `skin` varchar(20) collate utf8_unicode_ci NOT NULL default 'images',\n PRIMARY KEY (`menuid`)\n) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


mysql>SHOW FULL COLUMNS FROM my_menu;
=============================
Field Type Collation Null Key Default Extra Privileges Comment
menuid int(12) NULL NO PRI NULL auto_increment select,insert,update,references
pid int(6) NULL YES NULL select,insert,update,references
menu varchar(50) utf8_unicode_ci YES NULL select,insert,update,references
coltype varchar(30) utf8_unicode_ci NO select,insert,update,references
url varchar(200) utf8_unicode_ci YES NULL select,insert,update,references
fold varchar(50) utf8_unicode_ci NO select,insert,update,references
pub varchar(50) utf8_unicode_ci YES NULL select,insert,update,references
ifshow int(1) NULL YES NULL select,insert,update,references
moveable int(1) NULL YES NULL select,insert,update,references
xuhao int(4) NULL YES NULL select,insert,update,references
target varchar(10) utf8_unicode_ci YES NULL select,insert,update,references
openindex int(1) NULL NO 0 select,insert,update,references
secure int(1) NULL NO 0 select,insert,update,references
skin varchar(20) utf8_unicode_ci NO images select,insert,update,references


mysql>SHOW VARIABLES LIKE 'char%'
===============================
Variable_name Value
character_set_client latin1
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

...全文
1262 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
alan99 2010-04-26
  • 打赏
  • 举报
回复
没人回答啦~~
alan99 2010-04-22
  • 打赏
  • 举报
回复
To acmain,

我在网站后台新增的中文内容在网页中输出和在MYSQL QUERY BROWSER中显示就不会乱码, 但在PHPMYADMIN中查询却又显示乱码.

看来是跟存储的字符串编码有关... 怎么解决好呢?
alan99 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 acmain_chm 的回复:]

引用我在PHP程序中已经使用了mysql_query( "SET NAMES 'utf8'" );是不是就会覆盖
character_set_client latin1
character_set_connection utf8
character_set_results latin1
这三个变量默认的值?是。

建议再找个字段,检查一下其中的字符串,是不是以UTF8编码写入的。
……
[/Quote]

我用命令行工具试过了: set names 'gbk',页面还是输出乱码.
另外, 我用MYSQL QUERY BROWSER查看了MENU字段,column charset是utf8, 但用SELECT语句却发现表记录显示的都是乱码,而在PHPMYADMIN里用SELECT却显示是正常的, 这是怎么回事啊?
ACMAIN_CHM 2010-04-22
  • 打赏
  • 举报
回复
[Quote]我在PHP程序中已经使用了mysql_query( "SET NAMES 'utf8'" );是不是就会覆盖
character_set_client latin1
character_set_connection utf8
character_set_results latin1
这三个变量默认的值?[/Quote]是。

建议再找个字段,检查一下其中的字符串,是不是以UTF8编码写入的。
直接用mysql命令行工具, set name 'gbk'; 然后看看是否乱码。如果乱码基本上就是表中存储的字符串不是用UTF8存入的。
alan99 2010-04-22
  • 打赏
  • 举报
回复
我在PHP程序中已经使用了mysql_query( "SET NAMES 'utf8'" );是不是就会覆盖
character_set_client latin1
character_set_connection utf8
character_set_results latin1
这三个变量默认的值?
alan99 2010-04-22
  • 打赏
  • 举报
回复

To acmain,

所有的中文输出到页面都是乱码, 例如字段: `menu` varchar(50) collate utf8_unicode_ci default NULL

怎么确认存储的是否UTF8编码? 我在MY SQL 的客户端查看数据库表中记录是正常的

不好意思, 我是新手, 第一次用MY SQL. 还请多多指教.
alan99 2010-04-22
  • 打赏
  • 举报
回复
期盼解答...
ACMAIN_CHM 2010-04-21
  • 打赏
  • 举报
回复
mysql>SHOW VARIABLES LIKE 'char%'
===============================
Variable_name Value
character_set_client latin1
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/


直接在MYSQL命令行工具中或者MYSQL BROWSER图形工具先确认一下你的字段中存储的是UTF8编码。
ACMAIN_CHM 2010-04-21
  • 打赏
  • 举报
回复
哪个字段乱码? 随便指出一个就行了。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧