因为这可能是一个经典的“ON DUPLICATE KEY UPDATE”问题 - 它不是。
我有一个包含一些元值的表:
meta_id | user_id | meta_type | meta_value
实际上可以有更多具有相同user_id
&& meta_type
的条目,不能重复的是具有相同user_id
&& {{1的条目}}&安培;&安培; meta_type
。好吧,我可以为这些添加一个唯一的索引,但我害怕一件事 - meta_value
是一个 longtext ,所以它可能包含更大的数据。
所以当我想创建唯一的密钥(那么我可以使用ON DUPLICATE KEY UPDATE)时,我收到一个错误:
meta_value
当我试图添加一些限制时,弹出:
#1170 - BLOB/TEXT column 'meta_hodnota' used in key specification without a key length
这对于可能进入来说太低了。所以问题是这个密钥是如何工作的:
有关此问题的任何帮助/提示吗?
答案 0 :(得分:1)
任何机会3072个字节就够了吗?在这种情况下,您可以在mysql配置中使用innodb_large_prefix参数。
如果3072字节不够,我会做的是添加一个固定的长度列(类似于varchar(256))并使用该列创建索引。插入/更新记录时,您可以使用SUBSTR()将长文本修剪为256个字符,并使用该值填充额外列。
这当然只有在你关心meta_ *中的较小条目时才有效。根据行数的不同,您的光盘使用量会略有增加,但在大多数情况下这不应该是一个问题。