babyname/fate

数据库的sql无法执行

design365 opened this issue · 4 comments

Error Code: 1709. Index column size too large. The maximum column size is 767 bytes.

innodb_large_prefix已经设置成了on也没用。
那个character表的hash字段为啥是需要255?如果是md5的话 ,32个字符就够了。
麻烦看下。谢谢。

创建database的时候选utf8mb4

CREATE schema fate DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

不行的,已经试过了,不是字符集问题 ,是索引的长度限制 ,按照utf8mb4 只能191个字符

可能你的表里面有脏数据,hash的长度只有64,你可以把hash的长度改成64。而且默认我这里也没有添加索引啊。

我试过

ALTER TABLE `fate`.`character` 
ADD FULLTEXT INDEX `hash_index`(`hash`)

或者

ALTER TABLE `fate`.`character` 
ADD INDEX `hash_index`(`hash`) USING BTREE

都是可以的。

你试试改一下长度会不会报错,如果正常是不会报错的:

ALTER TABLE `fate`.`character` 
MODIFY COLUMN `hash` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL FIRST

还有如果你建表的时候不是按照utf8mb4建的话,字段的字符集和排序规则会是你创建database时的设定,这个长度确实是不够的。

改成64可以了,谢谢