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?
- 没有得到回答的类似问题: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);
另见
我有一个存储 MAC 地址的数据库。 quite some discussion 关于如何在 MySQL 数据库中存储 MAC 地址,我决定将其存储为无符号 BIGINT 以每行节省几个字节并实现更快的搜索。
这会很好用,除了当我从 table 检索实体时,实体中的 mac 地址限制为 2147483647,e.i。 32 位系统的 PHP MAX_INT 值。因此,如果 mac 地址超过 2147483647(这将发生在 99% 的地址),则地址将不正确。
似乎在从数据库到实体的过程中某处将值解析为 int,这破坏了值。
有什么办法可以避免这种情况吗?是否可以强制实体 属性 为字符串而不是 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);
另见