gpt4 book ai didi

mysql - INSERT 后 Perl 和 MySQL UTF-8 格式错误的字符

转载 作者:行者123 更新时间:2023-11-28 23:45:52 24 4
gpt4 key购买 nike

我有一个 UTF-8 编码的 XML 文件。我使用 Perl 来解析文件(使用 XML::Simple 模块)。我想放入 MySQL 表中的已解析代码也编码为 utf8(确切地说是 utf8_generic_ci)。一切都很好,但有两个字符出错(通常是 ő 和 ű 及其大写对 ŐŰ)。

这是我的 perl 代码:

use strict;
use warning;
use utf8;
use XML::Simple;
use DBI;

my $db = DBI->connect("dbi:mysql:dbname=$dbname;host=$host;port=$port",
$user, $passwd, {mysql_enable_utf8 => 1}) || die $DBI::errstr;

my $ref = XMLin("file.xml");

for ( my $i = 0; $i < scalar(@{$ref->{"PRODUCTS"}}); $i++ ) {
my $name = $ref->{"PRODUCTS"}[$i]->{"NAME"};
# some changes on the $name, for example removing whitespaces, etc.
$db->do("INSERT INTO products (productname) VALUES ('".$name."');");
}

这是我的 mysql 表结构(SHOW CREATE TABLE products; 输出):

| products | CREATE TABLE `products` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`productname` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

我认为一切都在 UTF-8 中。如果我看到源 XML 文件,则有很好的 őű 字符。但是在 mysql insert 之后他们出错了。其他口音也不错。

知道问题出在哪里吗?

最佳答案

你的代码中有错字,应该是:

{ mysql_enable_utf8 => 1 }  

此外,您应该绑定(bind) SQL 参数:

$db->do("INSERT INTO products (productname) VALUES (?)", undef, $name);

最后,this SO question可能对你有帮助

关于mysql - INSERT 后 Perl 和 MySQL UTF-8 格式错误的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com