来自 perl DBI 的 Sybase 警告消息

Sybase Warning messages from perl DBI

我从 perl 脚本连接到 sybase 12 并调用 storedprocs,我收到以下警告

DBD::Sybase::db prepare failed: Server message number=2401 severity=11 state=2 line=0 server=SERVER_NAME text=Character
set conversion is not available between client character set 'utf8' and server character set 'iso_1'.
Server message number=2411 severity=10 state=1 line=0 server=SERVER_NAME text=No conversions will be done.
at line 210.

现在,我知道这些只是警告,我的过程运行得非常好,但是我整天都在循环调用我的存储过程,因此它在我的日志文件中创建了很多警告消息,这导致整个过程比预期的要运行慢一点。有人可以帮助我如何抑制这些吗?

您可以使用回调来处理您想要忽略的消息。参见DBD::Sybase docs。以下内容来自文档。您指定要忽略的消息编号。

%blocked_msgs = map { $_ => 1 }  ( 2401, 2411 );
sub err_handler {
  my($err, $sev, $state, $line, $server, $proc, $msg, $sql, $err_type) = @_;

   if ( exists $blocked_msgs{$err} ) { # it's a blocked message
     return 0;    # This is not an error
   }
   return 1;
}

您可能会这样使用它:

$dbh = DBI->connect('dbi:Sybase:server=troll', 'sa', '');
$dbh->{syb_err_handler} = \&err_handler;
$dbh->do("exec someproc");
$dbh->disconnect;