乱码问题不要想得太复杂
2007-10-16 01:23
246 查看
原贴:http://bbs.doit.com.cn/viewthread.php?tid=43317
乱码问题不要想得太复杂
在你的php文件里的下列位置加上一条就行了$myconn=mysql_connect("localhost","root","root");
mysql_query("set names 'gb2312'");
或者mysql_query("set names 'UTF-8*'");就差不多了MYSQL里面就不要乱改了
用SHOW VARIABLES LIKE 'character_set_%';看看就差不多了
再谈升级MySQL出现乱码问题的解决
原文发表在 http://mlsx.xplore.cn/read.php/502.htm 作者:mlsx转贴请著名出处
-----------------------------------------------------------------------------------------------------------------------------
好早以前写过一篇关于MySQL升级到4.1出现乱码如何解决的帖子, 他只是讲述了当你导入的数据都正常了,该怎么使用到MySQL4.1以后版本的多语言特征。但是如果在导入的过程中就遇到了字符集的问题,该怎么办呢?就 是无论你怎么导入,怎么折腾字符集,都是乱码,但是你新插入的任何一条数据都没有问题,这就不是升级后调整字符集的问题了,而是在导出导入的工程中就需要 考虑。
UP这两天估计被这个问题折腾的够呛,虽然事后找到的原因不是在于数据库,但是这里还是把升级的过程记录下来。今天up问我上次论坛如何升级和转换的,我就记得不太清楚了。
我自己试验成功的有两种方式
1)只需要把你原来版本的数据库文件考到到新的数据库目录下,什么都不用修改,这个时候输出应该是正常的,默认采用了latin1字符集。这大概只最简单的方式了,不过这种方式不太好的地方在于一旦将来要转换字符集,很是麻烦。
2)假设你要从MySQL4.0以下版本升级到MySQL4.1以上版本,并明确指定需要的字符集是gb2312,那么我的步骤是
a)在原来的数据库上导出你要的数据库,可以使用下面的命令:
复制内容到剪贴板
代码:
$mysqldump -u username -p password databasename >xxx.sql
b)修改导出的sql文件,首先将导出的数据表加上默认字符集gb2312,可以在vi中只用下面的替换命令
复制内容到剪贴板
代码:
% s/engine=MyISAM;/engine=MyISAM DEFAULT CHARSET=GB2312;/g
当然你可以使用你喜欢的编辑器来替换;其次是将这个sql文件转化成gb2312编码格式的文件。你可以先file看看该文件的字符集,如果是ISO8859的,那还不错,如果是Non-ISO格式,那就必须转换,可以使用下面的命令
复制内容到剪贴板
代码:
iconv -c -t gb2312 -o outout.sql xxx.sql
UP导出的数据就是Non-ISO格式。
c)连接新的数据库服务器,创建需要的数据库
复制内容到剪贴板
代码:
mysqladmin -uroot -p create databasename
d)在导入数据之前,看看默认的字符集,可以使用下面的方法
复制内容到剪贴板
代码:
mysql> SHOW VARIABLES LIKE 'character_set_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 7 rows in set (0.00 sec)
默认的字符集都是latinn1的,这个时候,你需要将latin1转换成gb2312,方法如下
复制内容到剪贴板
代码:
mysql> set NAMES 'utf8'; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_database=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_server=utf8; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'character%'; +--------------------------+--------------------------------+ | 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/ | +--------------------------+--------------------------------+ 8 rows in set (0.00 sec)
这时数据库字符集已经修改,可以导入数据了
复制内容到剪贴板
代码:
mysql>source /path/to/xxx.sql
然后在你的网页中,在连接数据后,加上下面的一条指令
复制内容到剪贴板
代码:
mysql_query(”set NAMES 'utf8'");
应该就可以了,当然你的网页编码本身应该也要式gb2312的。
那么UP为什么会要折腾两天呢?不是他的步骤和方法有问题,而是操作系统的问题!操作系统?ubuntu!
问题就出现在iconv转换的过程中,只要转换成GB2312,那些中文就成了空白,而同样的文件,在其他Linux操作系统上就不会出现这个问题,难道 式ubuntu并不支持GB2312?还是别的原因,个人没有使用过ubuntu,不太清楚他的字符集和字体支持是如何的,不过想来我用过的 redhat,fedora,suse确实都在字符集和中文字体方面有些欠缺。这个方面,红旗Linux显然要优秀一些。
相关文章推荐
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
- 在mfc的dll里再动态加载jvm.dll引发的问题--不要在构造函数里做复杂的init流程
- eclipse java doc export 文档乱码问题
- JAVA的中文字符乱码问题
- Node.js抓取中文网页乱码问题和解决方法
- php解析XML和AJAX时乱码问题的解决
- Qt 绘制系统自带的最小化按钮和关闭按钮 及 解决中文乱码问题
- 剪不断,理还乱--Oracle的字符集乱码问题
- 向mysql插入数据显示乱码的问题
- 处理中文乱码问题
- 关于调用JS文件乱码问题处理方法
- jsp之间传参中文乱码问题
- Redhat enterprise linux下安装rlwrap工具 解决Sqlplus 在Linux 下光标乱码的问题
- PL/SQL中中文乱码问题
- 火狐浏览器下载乱码问题
- csdn待改进点之13------>每次评论博文, 平均约5s才有显示成功, 请不要跟我说这是网络问题
- 解决Ubuntu系统中文乱码显示问题
- c#远程获取网页内容及乱码问题的解决办法 .