gpt4 book ai didi

MySQL 字符编码

转载 作者:行者123 更新时间:2023-11-29 02:03:42 24 4
gpt4 key购买 nike

我有一个大型数据库,最初是使用 latin1 编码和 latin1_swedish_ci 排序规则创建的。

我做了很多更改,现在我正在使用 Doctrine2,它在查询之前使用 SET NAMES UTF8。我之前使用的是 Yii 框架,它也被设置为使用 UTF-8。基本上我一开始就忽略了所有这些,但据我了解,我一直在将 UTF-8 数据写入数据库,尽管它都应该是 latin1。

我想将我的数据库转换为 utf-8,但不知道如何安全地进行转换并确保我不会丢失数据。

两个问题:

  1. 有没有办法确保我正确地完成了这项工作?我有大约 2 GB 的数据,所以我不能只扫描它来测试,但是我可以查找某些字符以确定数据库是否已经在使用 UTF-8?

  2. 转换所有内容的正确方法是什么?我见过有人说我必须 mysqldump 并重新导入(使用某些标志,http://blog.makezine.com/2007/05/08/mysql-database-migration-latin/http://docs.moodle.org/22/en/Converting_your_MySQL_database_to_UTF8)。其他人说您可以ALTER TABLE... 每列 (http://www.bothernomore.com/2008/12/16/character-encoding-hell/)。我认为 SET utf8 之类的命令是 ALTER TABLE 的一部分,但我不知道它是否有效。

编辑:

我转储了数据并发现了几个重音字符。这是否表明数据本身是 UTF-8?如果是这样,我认为此处的说明适用,因为我可以“转换”为 blob 并安全返回 http://codex.wordpress.org/Converting_Database_Character_Sets

再次编辑:

完成我在上一个链接中阅读的内容后,我发现比较数据后,我丢失了第一个非 ascii(?)字符之后的所有字符。所以我的标题设置了单引号,新数据库有那个字符和它后面的所有字符。例如,这是我运行的代码:

ALTER TABLE articles CHANGE title title VARBINARY(255) NOT NULL;
ALTER TABLE articles CHANGE title title VARCHAR(255) CHARACTER SET utf8 NOT NULL;

不知何故导致我丢失了数据。

但是如果我转储,将每个表的字符集从 latin1 更改为 utf8,它就可以工作。我宁愿只修改东西而不是转储和重新创建,但如果没有人基于此提出任何其他建议或想法,我会求助于它。

最佳答案

要检查你可以做的事情:

SELECT t1.*
FROM table_1 t1
JOIN table_1 t2 on t1.guid = t2.guid AND
t1.field_1 <> t2.field_1 COLLATE UTF-8

基本上,即时更改列的排序规则,看看是否会出现任何错误。

您绝对不需要重新导入所有内容,ALTER TABLE 到新编码应该没问题,假设所有内容都可以转换 OK。

关于MySQL 字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com