场景
- 中途接手同事的项目,account.apikey account.secret加唯一索引, 报错
mysql specified key was too long max key length is 767bytes
分析
- innode引擎的数据库建立索引的每列最长不能超过767bytes; 所有组成索引的列长度和不能大于3072bytes
- myisam引擎的数据库建立索引的每列最长不能超过1000bytes; 所有组成索引的列长度和不能大于1000bytes
- gbk 2字节 utf8 3字节 utf8mb4 4字节
innode 引擎 account.secret char(200) utf8mb4; 索引允许的最大长度 767/4<200; 所以需要修改字符集
解决
ALTER TABLE
accountMODIFY COLUMN
secretchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'api secret' AFTER
apikey;