MySQL版本5.6.35
在一个长度为512字符的字段上创建unique key报错
CREATE DATABASE dpcs_metadata DEFAULT CHARACTER SET utf8; select * from information_schema.SCHEMATA; +--------------+--------------------+----------------------------+------------------------+----------+ | CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | +--------------+--------------------+----------------------------+------------------------+----------+ | def | information_schema | utf8 | utf8_general_ci | NULL | | def | dpcs_metadata | utf8 | utf8_general_ci | NULL | | def | mysql | utf8 | utf8_bin | NULL | | def | performance_schema | utf8 | utf8_general_ci | NULL | | def | test | utf8 | utf8_bin | NULL | +--------------+--------------------+----------------------------+------------------------+----------+ 5 rows in set (0.00 sec) use dpcs_metadata; create table raw_log_meta_data( id bigint NOT NULL AUTO_INCREMENT, app_id varchar(64), user_id varchar(128), file_path varchar(512), device_id varchar(128), update_time DATETIME, PRIMARY KEY (id), UNIQUE KEY (user_id), UNIQUE KEY (file_path) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
MySQL用1到2个额外字节记录该字段的长度,当字段长度小于等于255时使用1个字节记录字段长度,当长度大于255时使用2~4个字节记录字段长度,字段file_path的长度为512*3+2=1538个字节,超过系统默认767字节数限制
select * from information_schema.character_sets where character_set_name in('latin1', 'utf8',