mysql - CakePHP 3 - MySQL 'BIGINT' 字段在实体中未正确处理
问题描述
我有一个存储 MAC 地址的数据库。关于如何在 MySQL 数据库中存储 MAC 地址有很多讨论,我决定将其存储为无符号 BIGINT 以每行节省几个字节并实现更快的搜索。
这会很好用,除了当我从表中检索实体时,实体中的 mac 地址被限制为 2147483647,即 32 位系统的 PHP MAX_INT 值。因此,如果 MAC 地址超过 2147483647(99% 的地址都会发生这种情况),则 MAC 地址将不正确。
似乎在从数据库到实体的过程中的某个地方,值被解析为 int,这会破坏这些值。
有没有办法避免这种情况?是否可以强制实体属性为字符串而不是 int?
- 未收到答案的类似问题:Cakephp 3 Bigint 问题 - 未收到相同的联系电话
- 我的 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);
也可以看看
推荐阅读
- apache-kafka - kafka + kafka broker 不是主题分区的领导者可能是什么原因
- ios - 如何使用 StoryBoard 将 UIButton 添加为 UIBarButtonItem?
- reactjs - 如何为除一个以外的所有路径渲染元素
- mysql - MySQL 两列表作为主键
- perl - 在 perl 中创建映射哈希
- php - PHP - 在一个对象中分组相似的键
- javascript - 如何从字符串 SVG 替换内容(innerSVG?)
- python - 需要帮助从绘图中提取数据
- c# - 如何在 C# 中提取 Teamviewer 连接的用户或 ID
- javascript - 为什么条带客户令牌没有保存在我的数据库中?