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

Laravel 8存入Decimal类型数据小数点变为逗号如何解决

问题原因排查及解决方案

你的Laravel迁移文件定义本身没有错误,decimal(11,7)的精度完全可以支撑你输入的经纬度数值,小数点被替换为逗号的问题和字段类型定义无关,通常来自以下几个场景:

  • 数据库侧区域配置错误
    绝大多数关系型数据库(如MySQL、PostgreSQL)的数值格式化逻辑会继承系统或数据库自身的区域设置,如果lc_numeric参数配置的是使用逗号作为小数分隔符的区域(如欧洲、东南亚部分地区的本地化配置),就会自动将存储的数值小数点替换为逗号。
    你可以执行对应的SQL查看配置:
    SHOW VARIABLES LIKE 'lc_numeric';
    如果返回值不是en_US.UTF-8这类使用点作为小数分隔符的区域配置,即可定位为该问题。
  • Laravel应用侧区域配置错误
    检查config/app.php文件中的locale、faker_locale参数,如果配置的是使用逗号作为小数分隔符的语言区域,在数据写入前的格式化环节可能会自动转换小数点符号。
  • 写入前的数值格式化逻辑错误
    如果你在数据写入数据库前调用了number_format()等本地化格式化函数,且没有手动指定第三个参数(小数分隔符),函数会自动使用当前系统默认的小数分隔符,将点替换为逗号。
  • 数据库驱动配置问题
    部分PDO驱动会自动继承操作系统的区域设置处理数值,你可以在config/database.php对应的数据库连接配置中添加初始化指令,强制指定数值格式化规则,MySQL示例如下:
'options' => extension_loaded('pdo_mysql') ? array_filter([
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET lc_numeric='en_US.UTF-8'",
]) : [],

你可以先直接执行原生SQL插入测试数据,如果原生插入依然出现逗号替换问题,即可确定是数据库侧配置问题,否则排查应用侧的代码逻辑即可。

内容的提问来源于stack exchange,提问作者Sutan Firqy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:12:04