Error number: MY-011997; Symbol: ER_IB_MSG_172; SQLSTATE: HY000
Message: %s
错误说明
MY-011997(ER_IB_MSG_172)这个MySQL错误代码表示InnoDB表列定义中指定了比建表数据字典中允许的更高的默认字符集和/或字符集。它是一个技术性限制,不允许使用比数据字典中表示的字符集更高的字符集。这也被称为InnoDB的比较限制。
常见案例
如果在建表语句中指定了一个比数据字典允许的更高的默认字符集和/或字符集,就会出现这个错误。在某些情况下,某些特定的索引需要指定另一个选项,如果没有指定,就会出现这个错误。
解决方法
解决这个错误的最好方法是创建一个满足数据字典要求的表结构,以正确使用InnoDB比较限制。 “character_set_client”和“character_set_results”应该设置为“utf8mb4”,而“collation_connection”应该设置为“utf8mb4_unicode_ci”。要创建带有正确字符集的表,应该像这样书写SQL语句:CREATE TABLE tbl_name ( col_name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci )。这样,按照预期结果应该可以正常使用表了。
此外,还可以在执行表创建之前,先使用“SET NAMES 'utf8mb4’”语句设定默认字符集,再对表进行建立。这样,MySQL可以正确地处理InnoDB比较限制。
另外,需要注意的是,给表定义索引时也必须按照数据字典的要求定义索引。否则,就会遇到上述的MySQL ER_IB_MSG_172错误。