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

标签 mysql cakephp entity cakephp-3.0 biginteger

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

这会很好用,除了当我从表中检索实体时,实体中的 MAC 地址限制为 2147483647,即32 位系统的 PHP MAX_INT 值。因此,如果 MAC 地址超过 2147483647(99% 的地址都会发生这种情况),则 MAC 地址将不正确。

似乎在从数据库到实体的过程中,值被解析为 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);

另请参阅

关于mysql - CakePHP 3 - MySQL 'BIGINT' 字段在实体中未正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57271372/

相关文章:

java - 对象化 : Use an entity key juste created

php - 将相同数据发送到不同数据库的最佳实践?

php - CakePHP 3 : Generate shortened url (canonical)

php - 使用旧字段值进行数据验证

php - Cakephp 通过查找选项连接表不起作用

mysql - 如何将一个实体编码为另一个实体?

entity-framework - 当我在 4.0 中构建它时更新我的​​ EF 模型以使用 4.1

mysql - 统计一个时间段内,一组更小的时间段

php - foreach逻辑不重复html

mysql - 如何以不同的方式排序