Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

数据库出来的乱码怎么回事儿啊?

[复制链接]
hstar 发表于 2007-8-9 09:46:45 | 显示全部楼层 |阅读模式
我用的mysql数据库用phpadmin看是utf8的,但是我装utf8的discuz显示乱码,连标题也是乱码,我装gbk的显示的是问号,那些标题都是好的,这是怎么回事儿啊?我怎么改一下,谢谢,急!!!
回复

使用道具 举报

dessler 发表于 2007-8-9 11:22:28 | 显示全部楼层
mysql+php乱码原理与解决

发布日期:2007-06-15 15:14 浏览:593次


mysql+php产生乱码原因:

本公司mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码.
MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.
MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码.
用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码.
如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码.
PHP页面字符集不正确.
PHP连接MYSQL数据库语句指定的编码不正确.
注意:
        很多人都怀疑mysql版本不一致会导致乱码,相信看了本说明你就不会这样认为了.
        平时你在某些网站看到的文字可能有几种编码, 如你看到一个繁体字,它有可能是big5编码,也有 可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点.
如果你是做一个简体编码的网页,编码定为GB2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法:

将网站编码设为 utf-8,这样可以兼容世界上所有字符,
如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK.


       使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难了.

mysql+php产生乱码的解决办法:


如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题
修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令:


ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin


以上命令就是将test数据库的编码设为utf8.

修改表的编码:


ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin


以上命令就是将一个表category的编码改为utf8.

修改字段的编码:


ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL


以上命令就是将test表中 dd的字段编码改为utf8.

如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可.
这种情况也是修改页面charset即可.
在连接数据库的语句中.
                        mysql_connect('localhost','user','password');
                        mysql_select_db('my_db');
                        mysql_query("set names utf8;");   //select 数据库之后加多这一句

                        为了避免PHP页面乱码的发生,PHP页面开始第一句
                        header("content-type:text/html; charset=utf-8");
                        //强行指定页面的编码,以避免乱码


注意:
         照以上方法修改以后只能保证你新插入的数据不会乱码,举个例:如果你用户已提交的数据是BIG5,你却想通过以上方法改为可以在GB2312的网页正确显示是不可能的, 这种文字内码的变换只能通过另写程序来解决.

[ 本帖最后由 dessler 于 2007-8-9 11:24 编辑 ]
回复

使用道具 举报

zoneidc 发表于 2007-8-9 15:28:37 | 显示全部楼层
是装apache 还是IIS.如果是apache的话,用下面方法解决

apache 乱码|apache 显示乱码|apache乱码gb2312|apache无法显示中文
  linux/unix技术文章  加入时间:2007-6-8 16:27:38     点击:240
linux中apache无法显示中文 linux apache乱码
解决的方法之一:  
  (1)在每一个网页里增加  
;  
;  
并在APACHE的httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off  

解决的方法之二:  
   直接在httpd.conf配置文件中将AddDefaultCharset ISO-8859-1 改为   
     AddDefaultCharset GB2312 .ZH-CN .zh-cn  
   上述两种方法都可以解决apache Web服务器网页显示乱码的问题。 其中以第二种方法最好最简单,且一劳永逸 :  :em11: 。
上一条:[size=+0]ERROR 1045: Access denied for user: root@localhost (Using password: NO)
下一条:[size=+0]您的服务器不支持mysql数据库

·apache更改默认端口|apache端口设置
·Linux+Apache+PHP+MySQL+Zend Optimizer+PHPMyAdmin安装discuz及常见问题
·apache启动命令|linux apache启动|apache启动不了|apache启动后无法访问|unrecognized service
·It works!|apache it works|
·Linux+Apache+PHP+MySQL+Zend Optimizer+PHPMyAdmin
·apache 80端口无法打开|连接
·测试apache是否安装成功
·Apache配置
·Apache 2.0.55 for Linux 下载
·使用Apache&花生壳架设Web服务器
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-11-21 21:00 , Processed in 0.115853 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表