You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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),则说明驱动返回了浮点类型

补充解决思路(可选)

如果需要输出纯整数格式,可尝试以下方案:

  1. 若业务允许,将数据库列类型修改为int/bigint等整数类型;
  2. 在PHP中手动转换类型,遍历结果集将数值转为整数:
foreach ($result as &$row) {
    $row['column'] = (int)$row['column'];
}
echo json_encode($result);
  1. 使用JSON_NUMERIC_CHECK参数(PHP 5.3.3+),让json_encode自动处理数值格式:
echo json_encode($result, JSON_NUMERIC_CHECK);

内容的提问来源于stack exchange,提问作者Björn C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:01:15