免费注册 查看新帖 |

Chinaunix

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

把数据从xml(utf8)导入mysql4.1.10的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-17 15:18 |只看该作者 |倒序浏览
我的库建库到时候指定了CHARACTER set utf8
建表的时候也指定了CHARACTER SET UTF8
我是用perl程序把数据从xml里读出来
再插入到库里去的
解析xml用的是模块儿XML:arser
用DBI、DBD::mysql模块儿连的数据库
就是这样

require Encode;
use strict;
use DBI;
use XML:arser;

# create hash to hold values for expected column names
my %row = ("id" => undef, "value" => undef);

# connect to database and create parser object
my $dbh = DBI->connect ("DBI:mysql:test",
                        "root", "",
                        { RaiseError => 1, PrintError => 0});
my $parser = new XML:arser (
                        Handlers => {
                        Start => &handle_start,
                        End   => &handle_end,
                        Char  => &handle_text
                }
        );

$dbh->do("SET NAMES utf8";
# parse file and disconnect
$parser->parsefile ("test.xml";
$dbh->disconnect ();

sub handle_start
{
        my ($p, $tag) = @_;     # parser, tag name

        if ($tag eq "dv_address"
        {
                foreach my $key (keys (%row))
                {
                        $row{$key} = undef;
                }
        }
}

sub handle_text
{
        my ($p, $data) = @_;        # parser, text

        my $tag = $p->current_element ();
        $row{$tag} .= $data if exists ($row{$tag});
}

sub handle_end
{
        my ($p, $tag) = @_;     # parser, tag name

        if ($tag eq "row"
        {
                my $str;
                # construct column assignments for INSERT statement
                foreach my $key (keys (%row))
                {
                        $str .= "," if $str;
                        $t = Encode::decode_utf8($dbh->quote($row{$key}));
                        $str .= "$key=" . Encode::encode("utf8", $t);
                }
                $dbh->do ("INSERT INTO test SET $str";
        }
}


死活不成
乱码
远程ssh脸上去mysql看乱码
用程序php脸上去显示在页面上不论是用什么编码方式看都乱码
在php里作不做"set names utf8"的操作都乱码

[ 本帖最后由 foole 于 2005-11-17 15:23 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-11-19 02:46 |只看该作者
DROP TABLE IF EXISTS `marc`.`ttt`;

  1. CREATE TABLE `ttt` (
  2.   `id` int(10) unsigned NOT NULL auto_increment,
  3.   `name` varchar(20) character set gb2312 NOT NULL default '',
  4.   PRIMARY KEY  (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

复制代码

  1. !/usr/bin/perl
  2. use DBI;
  3. my ($dbh,$sth);
  4. $dbh=DBI->connect("DBI:mysql:tmp","root","1234");
  5. $dbh->do('set character set utf8');
  6. $sth=$dbh->prepare("insert into ttt(name) values(?)");
  7. $sth->execute("中文") or die $!;
复制代码


我没有用到xml::parser模块来测试你的程序
但是我的perl文件是save成utf8的,相信parser模块解析出的字符串肯定是utf8编码的。
之前我用基于xml::parser的XML::Simple来解析不存在任何问题。
我想最重要的应该是$dbh->do('set character set utf8');你试一下。
以前写vb的时候操作utf8字串也是如上来解决的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP