我在 Ubuntu 实例上有一个本地 MySQL 环境,在 Centos 7 实例上运行了一个实时 MariaDB 环境。当使用 PHP 从表中选择一个整数字段时,该值应该以整数形式返回,但是,MariaDB 会将该值作为字符串返回。
两个环境都使用 Laravel Eloquent ORM 运行相同的代码实例,并且我已经检查每个相应的数据库是否将值存储为整数/小整数等。
使用的代码是:
\App\Item::where('id','=',1)->first()->key_item;
Mysql,Ubuntu:
0
MariaDB,Centos 7:
"0"
对我来说,这是一种奇怪的行为,并且在编程方面,在评估“if”表达式中的预期整数时会导致错误。
是否有一些配置选项可以强制 MariaDB 将整数值作为整数类型返回?
答案1
在虚拟 Centos 7 机器上尝试解决方案后,我发现解决方案是用带有本机驱动程序的 PHP MySQL 插件替换数据库的 PHP-MySQL 插件层。
这个问题实际上与 MariaDB 或 MySQL 无关,而是与 PHP 驱动程序有关。将 MariaDB 换成 MySQL 后,这个问题仍然存在。Centos 7 附带的 MariaDB-PHP 驱动程序会将整数转换为字符串,唯一的数据库端解决方案是换出驱动程序。
关于本机驱动程序的更多信息可以在这里找到: https://dev.mysql.com/downloads/connector/php-mysqlnd/