前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录工作小问题-数据库返回类型

记录工作小问题-数据库返回类型

作者头像
用户2825413
发布2021-03-16 12:08:21
7230
发布2021-03-16 12:08:21
举报

记录工作中一个小问题

在我的虚拟机里面, 与前端同学进行接口联调, 完成后发版到测试环境时, 前端同学突然说这个不对劲, 以为啥不对呢, 原来说的是返回值类型不对.

不慌不忙, 去测试环境抓包看了下, 接口返回有 int 有 string, 再看我的虚拟机服务返回的全是 string.

经过调试发现, 数据库查询结果在虚拟机为 stirng, 在测试环境则为 int. 应该是我虚拟机环境出了什么问题.

什么参数会影响数据库查询值

首先我的虚拟机直连的测试库, 排除掉数据库服务端配置问题.

视线转移到客户端配置: PDO::ATTR_STRINGIFY_FETCHES 表示提取的时候将数值转换为字符串

这个参数是可以影响到返回值的, 但是配置项经过跟测试环境比对, 底层设置默认都是 false, pass掉这个点.

那么什么原因呢? 比对php版本、拓展包后, 拓展包发现测试环境比我的虚拟机里面多了一个 mysqlnd 的东西.

为了验证是否和这个有关系, 首先卸载了默认的 mysql 拓展包, 安装上了 mysqlnd

代码语言:javascript
复制
# libmysql mysql官方开发
yum remove php71w-mysql

yum install -y php71w-mysqlnd

重启php-fpm

请求发现类型这次对了

事情到这里结束了? ?

这三个到底什么关系, 为什么移除旧 mysql 安装上 mysqlnd 类型就不会转换了呢?

原来虚拟机使用的是 libmysql, 而测试环境使用的是 mysqlnd 连接的数据库, 当初安装使用的网上教程, 产生了不一致的问题.

pdo_mysql 驱动实现了 pdo的接口, 底层使用了mysqlnd或libmysql与mysql通讯.

使用mysqlnd, 需要使用以下命令编译安装:

代码语言:javascript
复制
编译php时,修改以下几个项参数即可
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd

mysqlnd

mysqldnd即mysql native driver简写,即是由PHP源码提供的mysql驱动连接代码.它的目的是代替旧的 libmysql(MySQL官方提供的)驱动.

简单来说, mysqlnd 提供了底层与myslq网络交互的能力, 而 pdo_mysql 则属于上层的协议, 是我们代码中可以直接使用的方法(query).

官方文档

与使用MySQL客户端库相比,使用MySQL本机驱动程序具有许多优势。

较早的MySQL客户端库由MySQL AB(现为Oracle Corporation)编写,因此是在MySQL许可下发行的。这最终导致MySQL默认情况下在PHP中禁用MySQL支持。但是,MySQL本机驱动程序是作为PHP项目的一部分开发的,因此是在PHP许可下发布的。这样可以消除过去一直存在问题的许可问题。

同样,在过去,您需要针对MySQL客户端库的副本构建MySQL数据库扩展。这通常意味着您需要在用于构建PHP源代码的计算机上安装MySQL。另外,当您的PHP应用程序运行时,MySQL数据库扩展将在运行时调用MySQL客户端库文件,因此需要在系统上安装该文件。使用MySQL Native Driver不再是这种情况,因为它已包含在标准发行版中。因此,您不需要安装MySQL即可构建PHP或运行PHP数据库应用程序。

由于MySQL本机驱动程序是作为PHP扩展编写的,因此它与PHP的工作紧密相关。由于驱动程序使用PHP内存管理系统,因此可以提高效率,尤其是在内存使用方面。它还支持PHP内存限制。与使用MySQL客户端库相比,使用MySQL本机驱动程序可获得可比的性能或更好的性能,它始终确保最有效地使用内存。内存效率的一个例子是,当使用MySQL客户端库时,每行在内存中存储两次,而对于MySQL Native Driver,每行仅在内存中存储一次。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 呆呆熊的技术路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 记录工作中一个小问题
  • 什么参数会影响数据库查询值
  • 事情到这里结束了? ?
  • mysqlnd
    • 官方文档
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档