laravel:数据库中是Integer 类型的数据,但读出来变成string类型

在本地环境正常运行的Laravel项目,部署到云服务器后,所有Integer型数据变为String型,导致JavaScript计算错误。问题源于mysqlnd扩展未开启,影响数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用 Laravel 写项目时,首先项目在本地环境 部署,返回数据没有问题。但是将项目部署在 云服务器环境情况却发生了变化。所有的 Integer 型都变成了 String 型。导致部分 Javascript 部分的number计算出错。

虽然重构代码可以解决问题,但是涉及的代码片段范围比较广泛,不便于修改代码片段解决。

两个运行环境部署方法一致,数据库字段类型没有问题。

本地环境返回样例
 

{
     "data1": 1,
     "data2": 0,
}

云服务器环境返回样例


{
    "data1": "1",
    "data2": "0",
}

通过错误查找定义为,php扩展 mysqlnd 没有开

首先,php是如何与mysql交互的。PHP通过扩展与mysql server连接通信。

扩展有三种:mysql,mysqli和pdo。

其中mysql扩展已经不被建议使用,它将在5.5被废弃,而在php7中被去除。

驱动有两种:libmysqlclient(MySQL client server library )和mysqlnd(MySQL native driver )。

在5.3之前,默认使用的都是libmysql.从5.3开始mysqlnd已经内置于php源代码中,并且官方强烈建议使用这个驱动,只要在编译的时候加上就行了,比如:./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd。
而从5.4开始,三种api的驱动默认都将为mysqlnd,所以编译的时候不需要指定驱动了,比如:./configure --with-mysqli --with-pdo-mysql --with-mysql。

 

mysqlnd官方手册http://php.net/manual/zh/book.mysqlnd.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值