免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7786 | 回复: 11
打印 上一主题 下一主题

perl向mysql写入中文时出现乱码,一堆??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-17 23:02 |只看该作者 |倒序浏览
因为是进行的测试,代码很简单的

use DBI;

my $dbh=DBI->connect("DBI:mysql:test","root","root");
my $before="set character_set_results=gb2312";
my $sth=$dbh->prepare($before);
$sth->execute();

my $rows=$dbh->do("INSERT INTO test(test) VALUES('你好')");

$dbh->disconnect;

结果用perl执行的时候能添加到数据库去,但是出来的是乱码。

我要疯掉了,character_set_client,connection,results我全部设定为gb2312了。
数据库、表、表项的整理全部设gb2312了,仍然是乱码,求大大语义指导。

操作系统:centOS5.3  MYSQL 5.0.45

另外我的另一段代码是有写有读的,把中文写进去是乱码,但是再重新读出来是正常。此外这段代码如果用phpadmin将字段改成中文的话,读出来也还是乱码。请大大赐教,谢谢。

论坛徽章:
0
2 [报告]
发表于 2010-02-18 12:50 |只看该作者
回复 1# blackmuyu

did you try "SET NAMES 'gb2312'" before doing the insert query?

论坛徽章:
0
3 [报告]
发表于 2010-02-18 13:08 |只看该作者
楼主的.pl文本文件是UTF-8还是ASCII格式的?我估计关键在于perl编辑器的设置。

论坛徽章:
0
4 [报告]
发表于 2010-02-18 14:55 |只看该作者
感谢两位朋友的回答,我试着在执行前加了一句
my $before2="SET NAMES 'gb2312'";
my $sth2=$dbh->prepare($before2);
$sth2->execute();"

出来的还是乱码,不过这次的乱码有所不同。不加这一句出现的是白底黑色的问号,加了这一句出的是黑底白色的问号。

另外,我把.pl文件按照当前语系(utf8)和简体中文(gb2312)存成两个文件,分别执行;前面一种情况出现2个问号,后面一种情况出现4个问号。

此外,我以上保存后都是直接在mysql中查看,用phpadmin查看时提示:没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果。  不知道有没有关系。

论坛徽章:
0
5 [报告]
发表于 2010-02-18 15:24 |只看该作者
回复 4# blackmuyu

会不会是table字符集设定的问题, 这里有一篇文章提到MySQL中文乱码问题, 希望有帮助.

http://www.jb51.net/article/11249.htm

论坛徽章:
0
6 [报告]
发表于 2010-02-19 19:21 |只看该作者
这篇文章我也看到过,那我再整理下,现在感觉应该是MYSQL的问题,跟PERL插入关系不大,因为我在mysql下直接插入中文,即使前面加了SET NAMES 的参数,出来的也是乱码,真是郁闷啊。

论坛徽章:
0
7 [报告]
发表于 2010-02-19 22:39 |只看该作者
我发现mysql只使用缺省的字符集,即iso8859-1,perl中使用utf8,写进去是什么,读出来还是什么。

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
8 [报告]
发表于 2010-02-20 12:53 |只看该作者
本帖最后由 wxlfh 于 2010-02-20 12:54 编辑

插入的中文字符的编码和MySQL数据库的编码应该一致,这样就不会乱码了。还有显示环境是什么编码,数据库的数据取出后转换成显示环境的编码后才能正常显示。

论坛徽章:
0
9 [报告]
发表于 2010-02-21 09:51 |只看该作者
谢谢你们的回答。数据库我是用CHARACTER SET设定的GB2312,表和列也都是这样的。我还把用SHOW CHARACTER LIKE 把能找到的CHAR的和COLLATION的全给改成了GB2312,用INSERT INTO ** VALUES('中文') 出来的还是乱码。wxlfh说的显示环境编码是什么意思啊?怎么看,还有怎么转换,能麻烦说下吗?谢谢。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
10 [报告]
发表于 2010-02-21 11:51 |只看该作者
LZ的脚本是什么编码,终端编码呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP