解决perl+mysql+mongodb中文乱码问题
发布时间:2020-12-16 00:00:17 所属栏目:大数据 来源:网络整理
导读:最近,使用perl导数据到mongodb过程中,发现存入到mongodb的中文数据乱码. 为什么要使用perl导入数据到mongodb中? 公司cms使用的mysql数据库太多多表连接并且性能越来越低,于是决定将mysql的数据冗余一份到mongodb中,以降低cms数据库的阳历. 那用什么方式导
最近,使用perl导数据到mongodb过程中,发现存入到mongodb的中文数据乱码. 为什么要使用perl导入数据到mongodb中? 公司cms使用的mysql数据库太多多表连接并且性能越来越低,于是决定将mysql的数据冗余一份到mongodb中,以降低cms数据库的阳历. 那用什么方式导入数据到mongodb中呢?使用shell操作mongodb不方便、使用php感觉效率不是很高、最后选择了perl.?在使用perl导数据的过程中出现中文乱码,这边简单还原一下mongodb出现中文乱码的现场.
mongodb中文乱码代码如下:
# cat /root/ttlsa_com.pl #!/usr/bin/perl use DBI; use MongoDB; use Encode; my $dbh = DBI->connect("DBI:mysql:database=cms;host=192.168.50.213","root","test11",{'RaiseError' => 1}) or die "error"; $dbh->do("set names gbk");//这部一定要做,否则从mysql取出来的数据就是乱码,my $sth = $dbh->prepare("select title? from cms limit 10 ) or die $dbh->errstr; $sth->execute() or die $sth->errstr; while(my @data = $sth->fetchrow_array()) { my $title = $data[0]; $collection->insert({ title => $title}); }发现mongodb出现乱码 perl运行结果,mongodb里面的中文是乱码,截图如下: [caption id="attachment_2384" align="aligncenter" width="729"] perl + mongodb中文乱码[/caption] mysql里面取出来的数据时gbk,存储到mongodb没有decode一次。修改为如下代码之后问题得到解决 mongodb无中文乱码代码如下: # cat /root/ttlsa_com.pl #!/usr/bin/perl use DBI; use MongoDB; use Encode; my $dbh = DBI->connect("DBI:mysql:database=cms;host=192.168.50.213",{'RaiseError' => 1}) or die "error"; $dbh->do("set names gbk"); my $sth = $dbh->prepare("select title? from cms limit 10 ) or die $dbh->errstr; $sth->execute() or die $sth->errstr; while(my @data = $sth->fetchrow_array()) { my $title = decode("gbk",$data[0]); $collection->insert({ title => $title}); }? perl运行结果如下图,以下mongodb中文不是乱码: [caption id="attachment_2385" align="aligncenter" width="612"] perl + mongodb乱码解决[/caption] ? encode与decode用法 use Encode; gbk转uft-8: $data = encode("utf-8",decode("gbk",$data)); 或者 $data = encode_utf8(decode("gbk",$data)); utf-8转gbk: $data = encode("gbk",decode("utf8",$data)); uft-8转gb2312: $data = encode("gb2312",$data));总结,尤其注意要插入到mongodb的数据的编码,不要再次出现这种情况. 转载请注明出处:http://www.ttlsa.com/html/2380.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |