• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
RDS MySQL 为utf8mb4表创建索引的方法
发布日期:2015-11-6 15:11:6

  RDS MySQL 为utf8mb4表创建索引的方法

  我们知道MySQL Innodb 对于索引长度的限制为 767 字节,并且UTF8mb4字符集是4字节字符集,则 767字节 / 4字节每字符 = 191字符(默认索引最大长度),所以在varchar(255)或char(255) 类型字段上创建索引会失败,提示最大索引长度为767字节。

  错误信息:

  UTF8mb4 字符集在Mysql官方网站的参考链接如下:

  http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

  解决问题的步骤:

  1. 首先通过RDS控制台->参数设置中调整 innodb_large_prefix 为ON。

  2. 创建表的时候指定表的row format格式为Dynamic或者Compressed,如下示例:

  2.1(xxxx@xxxx.mysql.rds.aliyuncs.com) [xxxx]> create table idx_length_test_03 (id int auto_increment primary key, name varchar(255)) ROW_FORMAT=DYNAMIC default charset utf8mb4;

  Query OK, 0 rows affected (0.00 sec)

  2.2(xxxx@xxxx.mysql.rds.aliyuncs.com) [xxxx]> insert into idx_length_test_03 (name) values ('xxxx');

  Query OK, 1 row affected (0.00 sec)

  2.3(xxxx@xxxx.mysql.rds.aliyuncs.com) [xxxx]> create index idx_leng on idx_length_test_03 (name);

  Query OK, 0 rows affected (0.01 sec)

  Records: 0 Duplicates: 0 Warnings: 0

  注:此步Query OK 说明正常

  2.4(xxxx@xxxx.mysql.rds.aliyuncs.com) [xxxx]> show warnings;

  Empty set (0.00 sec)

  2.5(xxxx@xxxx.mysql.rds.aliyuncs.com) [xxxx]> show create table idx_length_test_03 \G

  *************************** 1. row ***************************

  Table: idx_length_test_03

  Create Table: CREATE TABLE `idx_length_test_03` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `idx_leng` (`name`)

  ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC

  1 row in set (0.00 sec)