У меня есть XML-файл в кодировке UTF-8. Я использую Perl
для анализа файла (используя модуль XML::Simple
). Проанализированный код, который я хочу поместить в таблицу MySQL, также закодировал utf8 (точно utf8_generic_ci). Все хорошо, но два персонажа ошибаются (типично ő и ű с их прописными парами ŐŰ).Perl и MySQL UTF-8 искаженные символы после INSERT
Вот мой 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 они поступили не так. И другие акценты хороши.
Любая идея в чем проблема?
Добавить это почти вверху: 'use open ': std', ': encoding (UTF-8)';' –