我有一个存储 MAC 地址的数据库。有quite some discussion关于如何在 MySQL 数据库中存储 MAC 地址,我决定将其存储为无符号 BIGINT,以每行节省几个字节并实现更快的搜索。
这会很好用,除了当我从表中检索实体时,实体中的 MAC 地址限制为 2147483647,即32 位系统的 PHP MAX_INT 值。因此,如果 MAC 地址超过 2147483647(99% 的地址都会发生这种情况),则 MAC 地址将不正确。
似乎在从数据库到实体的过程中,值被解析为 int,这破坏了值。
有什么方法可以避免这种情况吗?是否可以强制实体属性为字符串而不是整数?
- 未收到答复的类似问题:Cakephp 3 Bigint issue - Not receiving the same contact number
- 我的 Windows 10 笔记本电脑上的 PHP 部署似乎以 32 位运行。一个解决方案是尝试让我的 PHP + Apache (XAMPP) 在 64 位中运行,但我宁愿有一个通用的解决方案。
最佳答案
转换发生在类型层(\Cake\Database\Type
),它是由查询对象在获取行时触发的。
默认情况下,大整数映射到 \Cake\Database\Type\IntegerType
。如果您需要在 32 位系统上运行它,那么您可以将 biginteger
类型重新映射到 \Cake\Database\Type\StringType
。在您的 config/bootstrap.php
中:
Type::map('biginteger', \Cake\Database\Type\StringType::class);
另请参阅
关于mysql - CakePHP 3 - MySQL 'BIGINT' 字段在实体中未正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57271372/