【发布时间】:2014-02-06 09:12:47
【问题描述】:
因为这可能显示为经典的“ON DUPLICATE KEY UPDATE”问题 - 它不是。
我有一个包含一些元值的表格,如下所示:
meta_id | user_id | meta_type | meta_value
实际上可以有更多具有相同user_id&&meta_type 的条目,不能重复的是具有相同user_id&&meta_type&&meta_value 的条目。好吧,我可以为这些添加一个唯一索引,但我担心一件事 - meta_value 是一个 longtext,因此它可以包含更大的数据。
所以当我想创建唯一键时(这样我就可以使用 ON DUPLICATE KEY UPDATE),我得到一个错误:
#1170 - BLOB/TEXT column 'meta_hodnota' used in key specification without a key length
当我尝试添加一些限制时,它会弹出:
#1071 - Specified key was too long; max key length is 767 bytes
这对于可能的条目来说太低了。所以问题是这个键实际上是如何工作的:
- 它只是说 MySQL 将检查多长时间的列的重复性,并且不会修改具有最大值的可能性。列值大小 (max(longtext))
注意:我只关心较小条目的这种三重重复性,我不关心大条目的重复性(不在这个地方) - 它正在减少获得最大值的可能性。列值大小(max(longtext)) 并只留下 767 字节作为列的最大值,即使该列是长文本。 - 不可接受 => 这里是否真的需要额外的查询?还是有其他方法? (例如 sql 端搜索和变量保存 => 根据结果选择操作)
对此有任何帮助/提示吗?
【问题讨论】:
标签: mysql sql phpmyadmin