Mysql 错误代码1170,SQL状态42000:BLOB/TEXT列';代币';用于无键长度的键规格

Mysql 错误代码1170,SQL状态42000:BLOB/TEXT列';代币';用于无键长度的键规格,mysql,Mysql,我创建了一个MYSQL表,该表包含两列(user\u id,token) 此表将为每个用户存储设备的GCM令牌 用户id为整数,令牌为文本 我将令牌设置为文本,因为我不知道令牌的大小 但是当我试图让这两列像这样独一无二的时候 ALTER TABLE user_account_device_token ADD UNIQUE idx_row_unique(user_id,token); 错误显示为此问题的标题。 我该怎么处理这个问题? 我读了老问题,但没有一个答案与我的问题相符 非常感谢您的帮助。

我创建了一个MYSQL表,该表包含两列(user\u id,token) 此表将为每个用户存储设备的GCM令牌

用户id为整数,令牌为文本

我将令牌设置为文本,因为我不知道令牌的大小 但是当我试图让这两列像这样独一无二的时候

ALTER TABLE user_account_device_token ADD UNIQUE idx_row_unique(user_id,token);
错误显示为此问题的标题。 我该怎么处理这个问题? 我读了老问题,但没有一个答案与我的问题相符 非常感谢您的帮助。非常感谢。

小虫子:

要使用索引,必须在文本字段中指定字符长度。在我的示例中,他们使用100个字符作为索引。文本字段的最大长度为767

ALTER TABLE user_account_device_token ADD UNIQUE
idx_row_unique(user_id,token(100));

非常感谢您的回复,但是您建议的100是令牌列的长度还是索引的长度,因为存储在令牌列中的值不受限制,而是索引使用的字符长度。所以在我的例子中,如果你有数据,只有在100个字符的mysql找到这两条记录后,数据才会不同,你必须通过比较来选择它。结果没有差别。或者说(仅)你有100个单词都以A开头,你说索引是1。然后mysql无法找到索引上的记录。他们找到了所有100个,然后使用compare来找到正确的oneNice和一个问题,请用这种方式,你能说令牌字段可以存储1000个字符的文本吗?是的,他们可以。最大长度为65535(216-1)个字符的文本列。如果值包含多字节字符,则有效最大长度较小。每个文本值都使用两字节长度前缀存储,该前缀指示值中的字节数。可为该类型提供可选长度M。如果这样做了,MariaDB将创建一个最小的文本类型的列,它的大小足以容纳M个字符的值。我非常感谢您的帮助。非常感谢兄弟。