【发布时间】:2017-02-09 22:57:11
【问题描述】:
迁移到新服务器后,在执行 SELECT 查询时,如果请求的列值为 NULL,Perl 的 DBI::fetchrow_array() 返回看似空字符串:defined() 返回 1 和length() 返回 0。
我读到的所有内容都告诉我,我应该从 NULL 中获取 undef,这确实是它在我的旧服务器上的工作方式。新服务器有一个 MySQL 数据库的副本,我使用 Sequel Pro 的 Export SQL 和 Import SQL 功能迁移了该数据库,这是一个 MySQL gui我在我的 Mac 上运行。对于这两个数据库,有问题的值在 Sequel Pro 中清楚地显示为灰色 NULL,如果我以交互方式运行 mysql,则显示为 NULL。例如,请参阅此记录中的name:
mysql> SELECT * from trials WHERE id = 26069 ;
+-------+----------+-----------+---------+--------+ ...
| id | language | numTrials | name | status | ...
+-------+----------+-----------+---------+--------+ ...
| 26069 | en | 3 | NULL | Done | ...
+-------+----------+-----------+---------+--------+ ...
1 row in set (0.00 sec)
我的旧服务器正在运行旧包:
- Perl 5.10.1 与 5.22.1
- DBI 1.634 与 1.636
- DBD::mysql 4.022 与 4.033
这是我在fetchrow_array附近的代码:
@result = $statementHandle->fetchrow_array ;
for my $value (@result) {
if (! utf8::is_utf8($value)) {
utf8::decode($value) ;
# Log values for debugging the NULL/undef issue:
my $aValue = $value ;
my $len = length($aValue) ;
if (!defined($value)) {
$aValue = "<unnndefined>" ;
}
print {*::STDLOG} info => "daValue l=$len : $daValue\n" ;
}
}
非常感谢任何可以提出建议的人!
【问题讨论】: