MySQL报错“BLOB/TEXT column 'secret' used in key specification without a key length”
现象
MySQL导入时,报错:
ERROR 1170 (42000) at line 587: BLOB/TEXT column 'secret' used in key specification without a key length
原因
Mysql数据库对于BLOB/TEXT这样类型的数据结构只能索引前N个字符。
使用vi打开sql文件,查看第587行代码:
1 2 3 4 5 6 7 | CREATE TABLE `fd_config` ( `id` varchar(36) NOT NULL, `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', `ap_st` text NOT NULL COMMENT 'app_secret', PRIMARY KEY (`id`), UNIQUE KEY `ap_st_U` (`ap_st`) USING HASH ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
解决
索引列添加一定长度,或者删除该索引列。
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE TABLE `fd_config` ( `id` varchar(36) NOT NULL, `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', `app_secret` text NOT NULL COMMENT 'app_secret', PRIMARY KEY (`id`), UNIQUE KEY `app_secret_UNIQUE` (app_secret(10)) USING HASH ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 或者 CREATE TABLE `fd_config` ( `id` varchar(36) NOT NULL, `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', `app_secret` text NOT NULL COMMENT 'app_secret', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
utf8mb4是4字节字符集,默认支持text或blob的key最大长度是3072/4=768字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | mysql> CREATE TABLE `fd_config` ( -> `id` varchar(36) NOT NULL, -> `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', -> `app_secret` text NOT NULL COMMENT 'app_secret', -> PRIMARY KEY (`id`), -> UNIQUE KEY `app_secret_UNIQUE` (app_secret(769)) USING HASH -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes mysql> mysql> mysql> CREATE TABLE `fd_config` ( -> `id` varchar(36) NOT NULL, -> `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', -> `app_secret` text NOT NULL COMMENT 'app_secret', -> PRIMARY KEY (`id`), -> UNIQUE KEY `app_secret_UNIQUE` (app_secret(768)) USING HASH -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; Query OK, 0 rows affected (0.36 sec) |