我刚刚看到 MySQL 5.5 提供utf8_general_mysql500_ci
了排序规则。
与其他排序规则有什么区别utf8_general_ci
?
我应该更好地使用utf8_general_mysql500_ci
吗?
添加了新的
utf8_general_mysql500_ci
和ucs2_general_mysql500_ci
排序规则,以保留5.1.24 之前utf8_general_ci
的ucs2_general_ci
MySQL 版本的行为。错误 #27877 更正了原始排序规则中的一个错误,但引入了包含 German'ß'
LATIN SMALL LETTER SHARP S 的列的不兼容性。(由于修复,该字符与之前比较不同的字符比较相等。)从早于 5.1.24 的版本升级到 MySQL 5.1.24 或更高版本后的问题是CHECK TABLE
产生此错误:需要表升级。 请执行“修复表`t`”或转储/重新加载以修复它!不幸
REPAIR TABLE
的是,无法解决问题。新的排序规则允许在 MySQL 5.1.24 之前创建的旧表升级到 MySQL 的当前版本。要在保留表文件的二进制升级后转换受影响的表,请更改表以使用新的排序规则。假设该表
t1
包含一个或多个有问题的utf8
列。要在表级别转换表,请使用如下语句:ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;
要在特定列的基础上应用更改,请使用这样的语句(确保重复最初指定的列定义,但
COLLATE
子句除外):ALTER TABLE t1 MODIFY c1 CHAR(N) CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;
要使用转储和重新加载过程升级表,请使用mysqldump转储表,修改
CREATE TABLE
转储文件中的语句以使用新的排序规则,然后重新加载表。进行适当的修改后,
CHECK TABLE
应该不会报错。有关详细信息,请参阅检查是否必须重建表或索引以及重建或修复表或索引。(错误 #43593、错误 #11752408)