gpt4 book ai didi

mysql - Perl DBI 中的 UTF8 字符编码,带有 ő 和 ű 字符的 MySQL

转载 作者:行者123 更新时间:2023-11-29 01:28:30 25 4
gpt4 key购买 nike

我在带有 DBIMySQLperl 脚本中使用带有漂亮 ő 和 ű 字符的匈牙利语。所有的数据库编码都是UTF8,我到处都是utf8。表格采用utf8_general_ci编码,行也是utf8_general_ci。

我试图将表和行编码更改为 utf8_hungarian_ci 和 utf8_unicode_ci。这没有帮助。

当我使用 PHPMyAdmin 插入行时,似乎一切正常,当我在控制台中检查时也很好。仅当我尝试在 Perl DBI 连接中使用时,只有在这种情况下我才会看到“?”字符而不是“ő”、“Ő”、“ű”和“ð”字符。

这是我的 perl 脚本:

use uft8;
use DBI

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

$db->do("INSERT INTO mytable (name) VALUES ('őűŐŰ')");
my $dbh = $db->prepare("SELECT name FROM mytable;");
$dbh->execute;
while (my @this = $dbh->fetchrow_array) {
print $this[0]."\n";
}

怎么了? DBI 是否有特殊的参数或设置?或者

最佳答案

您应该做的第一件事是确定失败的原因。在从 Perl 源代码读取字符后将它们存储在数据库中后,您正在打印从数据库中检索到的字符。这是可能失败的四个可能步骤。

  1. sprintf "U+%v04x", $sql 是否包含 U+0151.0171.0150.0170?如果是这样,查询就是您认为的那样。

  2. 当您使用脚本插入它们时,使用 phpMyAdmin 查看时数据是否正确显示?如果是,则字符已正确插入。

  3. sprintf "U+%v04x", $this[0] 是否给出 U+0151.0171.0150.0170?如果是这样,则字符已正确检索。

  4. 然后就是正确输出它们的问题。您没有告诉 Perl 如何对输出字符串进行编码。

    use open ':std', ':encoding(UTF8)';    # Most unix boxes
    use open ':std', ':encoding(cp1252)'; # Most Windows boxes

关于mysql - Perl DBI 中的 UTF8 字符编码,带有 ő 和 ű 字符的 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27874840/

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