SQL Server查询数字返回自动添加.0的原因排查
问题原因分析
导致数据库中存储的整数3输出后变为3.0的核心原因主要有三点:
- 数据库列类型特性:如果你的
column列使用的是float、real或带小数位的decimal/numeric(比如decimal(10,1))类型,SQL Server会以浮点或带小数的数值格式存储数据。哪怕实际值是整数,数据库返回给应用的仍是带小数位的数值类型。 - PDO sqlsrv驱动的类型映射:sqlsrv驱动在转换SQL Server数据到PHP变量时,会将
float/real类型映射为PHP的float类型,而非int。因此即使数据库里存的是3,驱动返回给PHP的也是float(3.0)。 - json_encode的默认行为:PHP的
json_encode()函数处理float类型时,只要数值是整数形式的浮点数(如3.0),默认会输出带.0的格式;而int类型则会输出纯整数格式。
验证方式
你可以在fetchAll后打印变量类型确认:
var_dump($result[0]['column']); // 若输出为 float(3),则说明驱动返回了浮点类型
补充解决思路(可选)
如果需要输出纯整数格式,可尝试以下方案:
- 若业务允许,将数据库列类型修改为
int/bigint等整数类型; - 在PHP中手动转换类型,遍历结果集将数值转为整数:
foreach ($result as &$row) { $row['column'] = (int)$row['column']; } echo json_encode($result);
- 使用
JSON_NUMERIC_CHECK参数(PHP 5.3.3+),让json_encode自动处理数值格式:
echo json_encode($result, JSON_NUMERIC_CHECK);
内容的提问来源于stack exchange,提问作者Björn C
相关产品推荐
相关产品推荐

