gpt4 book ai didi

mysql - 当我将特殊的 latin1 字符写入 utf-8 编码的 mysql 表时,数据是否丢失?

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

例如,当我写特殊的 latin1 字符时

á, é ã , ê

到一个utf-8编码的mysql表,数据丢失了吗?

该表的字符集是 utf-8。

有什么方法可以恢复 latin1 编码的行,以便我可以转换为 utf-8 并写回(这次以正确的方式)?

更新

我想我对“数据”的含义不是很具体。我所说的数据是指特殊字符,而不是行。

选择时,我仍然得到行和字段,但带有“?”而不是特殊的 latin1 字符。有可能恢复那些'?'并转换为正确的 utf8?

最佳答案

如果整个数据库(或整个表)受到影响,您可以首先使用 SET NAMES Latin1 验证它是一个 Latin1-as-UTF8 字符集问题:

mysql> select txt from tbl;
+-----------+
| txt |
+-----------+
| Québec |
| Québec |
+-----------+
2 rows in set (0.00 sec)

mysql> SET NAMES Latin1;
Query OK, 0 rows affected (0.00 sec)

mysql> select txt from tbl;
+---------+
| txt |
+---------+
| Québec |
| Québec |
+---------+
2 rows in set (0.00 sec)

如果这可以验证,即您在使用默认字符集 Latin-1 时获得了所需的数据,那么您可以强制转储整个表 --default-character-set=latin1 以便文件将使用正确的数据创建,尽管使用了错误的字符集规范

但现在您可以替换标题行说明

/*!40101 SET NAMES latin1 */;

使用 UTF8。重新导入数据库,大功告成。

如果只有一些行受到影响,那么它就困难得多:

SELECT txt, CAST(CAST(txt AS CHAR CHARACTER SET Latin1) AS BINARY) AS utf8 FROM tbl;

+-----------+---------+
| txt | utf8 |
+-----------+---------+
| Québec | Québec |
+-----------+---------+
1 row in set (0.00 sec)

...但是您在定位受影响的行时遇到了问题。您可能会发现一些代码点

WHERE txt LIKE '%Ã%'

但对于其他人,您必须手动采样。

关于mysql - 当我将特殊的 latin1 字符写入 utf-8 编码的 mysql 表时,数据是否丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13086631/

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