我有一个主键为varchar(255)的表。在某些情况下,255个字符是不够的。我尝试将字段更改为文本,但我得到以下错误:
BLOB/TEXT column 'message_id' used in key specification without a key length
我该如何解决这个问题?
编辑:我还应该指出,这个表有一个多列的复合主键。
我有一个主键为varchar(255)的表。在某些情况下,255个字符是不够的。我尝试将字段更改为文本,但我得到以下错误:
BLOB/TEXT column 'message_id' used in key specification without a key length
我该如何解决这个问题?
编辑:我还应该指出,这个表有一个多列的复合主键。
当前回答
我曾经用过这个,也犯过你提到的错误:
CREATE INDEX idx_col1 ON my_table (col1);
然后我把它换成了这个,并解决了:
CREATE INDEX idx_col1 ON my_table (col1(255));
其他回答
不要用长值作为主键。这会毁了你的表现。请参阅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 -编辑数据类型,应用
你可以在alter table请求中指定键的长度,就像这样:
alter table authors ADD UNIQUE(name_first(20), name_second(20));
去mysql编辑表->更改列类型为varchar(45)。
添加另一个varChar(255)列(默认为空字符串而不是null),以在255个字符不够时保存溢出,并将此PK更改为使用两个列。然而,这听起来不像一个设计良好的数据库模式,我建议找一个数据建模师来看看你所拥有的,并对其进行重构以获得更多的规范化。