Mysql 从utf8\U通用\U ci转换为utf8\U unicode\U ci
我有一个utf8\u general\u ci数据库,我对转换为utf8\u unicode\u ci感兴趣。 我尝试了以下命令Mysql 从utf8\U通用\U ci转换为utf8\U unicode\U ci,mysql,character-encoding,Mysql,Character Encoding,我有一个utf8\u general\u ci数据库,我对转换为utf8\u unicode\u ci感兴趣。 我尝试了以下命令 ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; (for every single table) 但这似乎会改变未来
ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; (for every single table)
但这似乎会改变未来数据的字符集,但不会将实际的现有数据从utf8\u general\u ci转换为utf8\u unicode\u ci。
有没有办法将现有数据转换为utf8\u unicode\u ci?您必须更改每个表中每个字段的排序规则。正如您所说,表的排序规则只是以后创建的字段的默认值,而数据库的排序规则只是以后创建的表的默认值
SHOW CREATE TABLE
查看它是否真的在列上设置了字符集
和排序规则
,而不仅仅是默认值
在更改之前字符集是什么
对于一些应该包含utf8的字段,请选择col,HEX(col).
。这将帮助我们确定表中是否有utf8。根据字符集
,字符的编码是不同的;HEX
有助于发现这种情况
排序(其中
,按
排序等)由排序规则
控制。索引可能必须根据ALTER表
重建。带索引的大表转换是否需要“很长”的时间
要真正了解utf8\u general\u ci
和utf8\u unicode\u ci
之间的区别,您需要一个“组合重音”,或者更简单地说,德语与ss
:
mysql> SELECT 'ß' = 'ss' COLLATE utf8_general_ci,
'ß' = 'ss' COLLATE utf8_unicode_ci;
+-------------------------------------+-------------------------------------+
| 'ß' = 'ss' COLLATE utf8_general_ci | 'ß' = 'ss' COLLATE utf8_unicode_ci |
+-------------------------------------+-------------------------------------+
| 0 | 1 |
+-------------------------------------+-------------------------------------+
但是,要在表中测试这一点,您需要存储这些值,并使用WHERE
或GROUP\u CONCAT
或其他方法来确定相等性
您有什么“证据”证明更改未能实现排序规则更改
(处理其他注释:REPAIR
应该是不相关的。CONVERT TO
告诉ALTER
实际修改数据,因此它应该执行所需的操作。)如何更改每个表中每个字段的排序规则?如果您REPAIR
整个表怎么办?它将用新的排序规则重建它。我认为这应该会有所帮助-