8

我刚刚看到 MySQL 5.5 提供utf8_general_mysql500_ci了排序规则。

与其他排序规则有什么区别utf8_general_ci

我应该更好地使用utf8_general_mysql500_ci吗?

4

1 回答 1

10

MySQL 5.5.21 中的更改中所述

  • 添加了新的utf8_general_mysql500_ciucs2_general_mysql500_ci排序规则,以保留5.1.24 之前utf8_general_ciucs2_general_ciMySQL 版本的行为。错误 #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)

于 2013-05-16T14:15:06.210 回答