Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从utf8\U通用\U ci转换为utf8\U unicode\U ci_Mysql_Character Encoding - Fatal编程技术网

Mysql 从utf8\U通用\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) 但这似乎会改变未来

我有一个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)
但这似乎会改变未来数据的字符集,但不会将实际的现有数据从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
整个表怎么办?它将用新的排序规则重建它。我认为这应该会有所帮助-