我的代码本质上是
$query = mysql_query('SELECT `foo` FROM `Bar` WHERE id=1', $conn)
$result = mysql_fetch_assoc($query)
$val = $map[$result['foo']];
其中 foo 的类型为CHAR(2)
, id=1 的值为 07
但是返回的值只有 7,这在将其用作关联数组的索引时会导致问题。
PhpMyAdmin 显示正确的值 07
使用 mysql_fetch_object 时我也得到相同的结果
来自评论: var_dump($result) 的结果是
array
'foo' => string '7' (length=1)
和 var_dump($map) 是数组 '07' => 字符串 'bar' (length=3)
编辑 2:我刚刚发现了一个更大的问题:以 0 开头的电话号码也受到影响。没有简单的方法(如下面建议的 str_pad)来解决这个问题
编辑 3:服务器是 Windows 7,带有 xampp 1.7.7 和 PHP 5.3.8 数据库是 InnoDB,带有 latin1_swedish_ci 和 COMPACT 行格式
CREATE TABLE `Bar` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`foo` char(2) DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
编辑 4:
SELECT CONCAT("0", foo) FROM Bar WHERE id = 55
返回 07