mysql - 使用 XPath 和编码导入 xml

标签 mysql xml perl xpath encoding

我想从带有德语变音符号 (ä,ö,ü) 的 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;

关于mysql - 使用 XPath 和编码导入 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27373799/

相关文章:

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

mysql - 我如何让 Rails 使用这个特定的 MYSQL?

android - 如何使 TextView 大小相同而不管里面的文本

java - 有人可以帮我解决这个 JAVA SAXParser 吗?

javascript - Jquery.html() 不工作

PHP - MySQL 从产品表创建 TreeView

MySQL - 当外键更改时,如何使旧键的一行同时删除?

regex - 另外使用未初始化值 $1 - Perl

multithreading - 线程/ fork 的效率

string - 如何强制 Text::CSV 将数字存储为文本?