使用XPath和编码导入xml

佐丹奴

我想从带有德国变音符号(ä,ö,ü)的xml导入数据。为了分析问题,我将数据导入为sql-insert,csv-file和xml-file。要查看导入的来源,请使用前缀insert,csv和xml标记条目。结果如下:

来自xml源的变音符号未正确导入。
以下是产生此代码的代码:

表定义

DROP TABLE IF EXISTS test01.animal;
CREATE TABLE test01.animal (
name VARCHAR(50) DEFAULT NULL
, category VARCHAR(50) DEFAULT NULL
) ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
;

插入

INSERT INTO test01.animal (name, category)
VALUES
('insert_snäke','reptile')
,('insert_frög','amphibian')
,('insert_tüna','fish')
,('insert_racoon','mammal')
;

CSV
数据

csv_snäke,reptile
csv_frög,amphibian
csv_tüna,fish
csv_racoon,mammal

sql

LOAD DATA INFILE 'C:/animals.csv'
INTO TABLE test01.animal
FIELDS TERMINATED BY ','
;

XML
数据

<?xml version="1.0" encoding="UTF-8"?>
<database>
 <select query="SELECT name, category FROM animal">
  <row>
   <name>xml_snäke</name>
   <category>reptile</category>
  </row>
  <row>
   <name>xml_frög</name>
   <category>amphibian</category>
  </row>
  <row>
   <name>xml_tüna</name>
   <category>fish</category>
  </row>
  <row>
   <name>xml_racoon</name>
   <category>mammal</category>
  </row>
 </select>
</database>

Perl / XPath

use strict;
use DBI;
use XML::XPath;
use XML::XPath::XMLParser;

my $dir0 = "C:";

my $dbh = DBI->connect ("DBI:mysql:test01",
                        "root", "fire2013",
                        { RaiseError => 1, PrintError => 0});
my $xp = XML::XPath->new (filename => "$dir0/animals.xml");
my $nodelist = $xp->find ("//row");
foreach my $row ($nodelist->get_nodelist ())
    {
        $dbh->do (
            "INSERT INTO animal (name, category) VALUES (?,?)",
            undef,
            $row->find ("name")->string_value (),
            $row->find ("category")->string_value ()
            );
    }
$dbh->disconnect ();

知道为什么我不能通过导入xml变音调吗?任何帮助表示赞赏。谢谢。
PS:Windows 7 / MariaDB 5.5.31 / Strawberry Perl 5.16

冈巴萨斯

试试这个:

$dbh->do(qq{SET NAMES 'utf8'}) or die $dbh->errstr;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章