Sql server 使用Perl DBI将UTF-8值插入SQL Server数据库时编码不正确

Sql server 使用Perl DBI将UTF-8值插入SQL Server数据库时编码不正确,sql-server,perl,encoding,sap-ase,Sql Server,Perl,Encoding,Sap Ase,我会对Perl/DBI/Sybase/SQL Server的这种编码问题发疯 我的代码示例: $Self->{DatabaseConnectionStr} = 'dbi:Sybase:server=myhostname.local;database=database1;language=german;charset=utf8;'; $Self->{DatabaseHandler} = DBI->connect($Self->{DatabaseConnectionStr},

我会对Perl/DBI/Sybase/SQL Server的这种编码问题发疯

我的代码示例:

$Self->{DatabaseConnectionStr} = 'dbi:Sybase:server=myhostname.local;database=database1;language=german;charset=utf8;';
$Self->{DatabaseHandler} = DBI->connect($Self->{DatabaseConnectionStr}, 'srx', 'randompassword');

my $sth = $Self->{DatabaseHandler}->prepare("BEGIN TRANSACTION TRANS1");
my $rc = $sth->execute;


my $SQLStatement = " INSERT INTO [Random Table Name]                                       " .
                   " ( [Field_1], [Field_2], [Field_3], [Field_4], [Field_5], [Field_6],   " .
                   "   [Field_7], [Field_8], [Field_9], [Field_10] )                       " .
                   " VALUES                                                                " .
                   " ( ?,?,?,?,?,?,?,?,?,?)                                                " ;


$sth = $Self->{DatabaseHandler}->prepare($SQLStatement);

my @bind = ($F01, $F02, $F03, $F04, $F05, $F06, $F07, $F08, $F09, $F10);

for my $i (0 .. $#bind) {
    $bind[$i] = Encode::encode_utf8($bind[$i]);
}

$sth->execute(@bind);

if ($Success) {
    $sth = $Self->{DatabaseHandler}->prepare("COMMIT TRANSACTION TRANS1");
} else {
    $sth = $Self->{DatabaseHandler}->prepare("ROLLBACK TRANSACTION TRANS1");
}

$rc = $sth->execute;
为什么我会得到这样的价值观├╝我的数据库中的berschreitung而不是Überschreitung

如果你需要更多信息,请告诉我


不幸的是,我不知道字段1-10的编码是什么。

不幸的是,SQL Server至今仍不支持UTF-8。

从哪里来的$F01到$F10?结果看起来像双重编码,但我无法解释您得到的特定字符。这似乎是有可能的,因为如果您对已经进行UTF-8编码的数据调用Encode::Encode_utf8,您会得到这样的结果变量主要来自另一个数据库PostgreSQL.ready UTF-8-encoded-不幸的是,如果我删除Encode::Encode_utf8,则没有区别解决方案在于从数据源遵循编码,因此您必须仔细解释并包含相关代码。为了简化事情,让我们关注包含Ü的字段berschreitung@Borodin:通过将字符串打印到文本文件中,我发现编码为iso-8859-1。因此,字符“ä”在iso-8859-1中是十六进制E4。在我将其转换为utf-8并将其打印到文件中之后,字符是hex c3 a4 correct!。但无论我要执行什么,结果总是2b f1。显示为“+ñ”。有什么想法吗?