相同的数据库,不同的工作站导致不同的类型(Laravel,MySQL)


Same DB, different work stations results in different types (Laravel, MySQL)

我在Windows工作站上使用Laravel,在Linux上,我只使用以下行运行测试:

echo gettype(Patient::find(11)->case_id);

我添加了这样的专栏:

$table->integer('case_id');

数据库在linux上,我从windows远程连接。

结果:在windows机器上:"integer",在linux机器上:"string"

(这导致了一个可怕的错误,我使用===期望它是整数…)

有什么想法吗?

不同的MySQL驱动程序呈现数据库中提取数据的方式不同
更具体地说,在Linux的情况下只使用字符串。

解决此问题的最快方法是使用如下比较:
假设$case_id="5"; ,则($case_id == 5) // true而不是($case_id === 5) // false

也许Linux驱动程序也可以调整为不仅返回字符串
如果你提供特定于驱动程序的信息,也许有人可以帮助你微调驱动程序。

如果你正在使用PDO,那么这些将有所帮助:

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

第二行与字符串无关,但建议使用。