我有一个主键为varchar(255)的表。在某些情况下,255个字符是不够的。我尝试将字段更改为文本,但我得到以下错误:

BLOB/TEXT column 'message_id' used in key specification without a key length

我该如何解决这个问题?

编辑:我还应该指出,这个表有一个多列的复合主键。


当前回答

另外,如果你想在这个字段中使用索引,你应该使用MyISAM存储引擎和FULLTEXT索引类型。

其他回答

alter table authors ADD UNIQUE(name_first(767), name_second(767));

注意:767是MySQL在处理blob/text索引时索引列的字符数限制

参考:http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html

不要用长值作为主键。这会毁了你的表现。请参阅mysql手册,第13.6.13节“InnoDB性能调优和故障排除”。

相反,使用一个代理int键作为主键(使用auto_increment),并使用长键作为辅助UNIQUE。

如果你的数据类型是TEXT -你将不得不改变它为VARCHAR 方案1:查询

ALTER TABLE table_name MODIFY COLUMN col_name datatype;
ALTER TABLE my_table MODIFY COLUMN my_col VARCHAR(255);

解决方案2:GUI (MySQL工作台) 步骤1 -在文本框中写入

Step2 -编辑数据类型,应用

像这样使用

@Id
@Column(name = "userEmailId", length=100)
private String userEmailId;

该问题的解决方案是,在CREATE TABLE语句中,您可以在列创建定义之后添加约束UNIQUE (problemtextfield(300)),例如,为TEXT字段指定300个字符的键长度。然后,问题文本字段的前300个字符需要是唯一的,之后的任何差异将被忽略。