我不使用 DBD::Sybase,但是 a) 我使用了很多其他 DBD,并且 b) 我目前正在收集有关 DBD 中 unicode 支持的信息。根据 pod,使用 syb_enable_utf8 时至少需要 OpenClient 15.x。您使用的是 15.x 还是更高版本?如果您的客户端低于 15.x,或者您的 DBD::Sybase 版本太旧,则可能未定义 syb_enable_utf8。不幸的是,当添加 syb_enable_utf8 时,我无法从 Changes 文件中看到。
但是,当您说“找不到方法”时,我认为这是一个线索,因为 syb_enable_utf8 不是方法,它是 pod 中的一个属性(它位于 Sybase 特定属性下)。因此,您需要将其添加到您的连接调用或通过这样的连接句柄进行设置:
my $h = DBI->connect("dbi:Sybase:something","user","password", {syb_enable_utf8 => 1});
或者
$h->{syb_enable_utf8} = 1;
您还应该阅读 pod 中描述设置 syb_enable_utf8 时会发生什么的位,因为它从仅适用于 UNIVARCHAR、UNICHAR 和 UNITEXT 列的文档中显示。
最后,您需要确保首先正确插入数据。我猜它是否不是使用 syb_enable_utf8 和 charset=utf8 从 Perl 插入的,并且在插入之前你的数据在 Perl 中不是正确的 unicode 字符,你会得到垃圾。
Raze2dust 所做的评论与您的问题无关,但如果您打算将从您的数据库检索到的数据写入其他地方,则值得留意。只需记住对脚本的任何数据输入进行解码,并对任何数据输出进行编码。