CakePHP 3 - MySQL 'BIGINT' 字段在实体中未正确处理

CakePHP 3 - MySQL 'BIGINT' field not processed correctly in entity

我有一个存储 MAC 地址的数据库。 quite some discussion 关于如何在 MySQL 数据库中存储 MAC 地址,我决定将其存储为无符号 BIGINT 以每行节省几个字节并实现更快的搜索。

这会很好用,除了当我从 table 检索实体时,实体中的 mac 地址限制为 2147483647,e.i。 32 位系统的 PHP MAX_INT 值。因此,如果 mac 地址超过 2147483647(这将发生在 99% 的地址),则地址将不正确。

似乎在从数据库到实体的过程中某处将值解析为 int,这破坏了值。

有什么办法可以避免这种情况吗?是否可以强制实体 属性 为字符串而不是 int?

转换发生在类型层 (\Cake\Database\Type),它由查询对象在获取行时触发。

默认情况下,大整数映射到 \Cake\Database\Type\IntegerType。如果您需要在 32 位系统上 运行,那么您可以将 biginteger 类型重新映射为 \Cake\Database\Type\StringType。在你的 config/bootstrap.php:

Type::map('biginteger', \Cake\Database\Type\StringType::class);

另见