我想将Amazon MySQL RDS实例导出到我自己的运行MySQL的服务器上.我成功地转储了数据库并在新数据库上重新创建了用户,但是当我去导入dumpfile时,我得到:
ERROR 1071 (42000) at line 25: Specified key was too long; max key length is 767 bytes
一些谷歌搜索显示InnoDB的最大密钥大小为767.事实证明我们在RDS中使用了以下选项:
innodb_large_prefix=on
innodb_file_format=barracuda
innodb_file_per_table=true
log_bin_trust_function_creators=1
我将这些选项添加到my.cnf,但是我收到了相同的错误消息.然后我读到innodb_large_prefix仅适用于ROW_TYPE = DYNAMIC的表.事实证明我们在RDS上使用动态行,但这些行没有在转储文件中创建为DYNAMIC.然后我发现这个*帖子将ROW_TYPE = DYNAMIC选项添加到dumpfile:Force row_format on mysqldump
然而,我仍然得到相同的错误消息.想法?
解决方法:
我相信这是编码问题.
如果在RDS上使用latin1,但在您的环境中使用UTF-8,那么索引VARCHAR(256)就成了问题.
因为在UTF-8中VARCHAR(256)在内部变为VARCHAR(768).