首页 > 解决方案 > 将 MySQL latin1_swedish_ci 转换为 utf8_unicode_ci 时丢失数据

问题描述

当我尝试将数据转换latin1_swedish_ciutf8_unicode_ci我丢失数据时!TEXT 列在第一个特殊字符处被剪切。

例如: 在此处输入图像描述 变成: 在此处输入图像描述

然而,我尝试了很多方法来转换我的列,所有解决方案最终都会在第一个特殊字符处删除数据!

我通过 phpMyAdmin 或此 SQL 请求进行了尝试:

UPDATE `page` SET page_text = CONVERT(cast(CONVERT(page_text USING latin1) AS BINARY) USING utf8);

我还尝试了 php 脚本:

https://github.com/nicjansma/mysql-convert-latin1-to-utf8/blob/master/mysql-convert-latin1-to-utf8.php

结果始终相同,数据在第一个特殊字符时丢失!

我应该怎么办?

更新

我可以将数据更改为 utf8

ALTER TABLE page CONVERT TO CHARACTER SET utf8mb4;

或者

ALTER TABLE page CONVERT TO CHARACTER SET utf8;

不会丢失数据,但不能正确显示特殊字符。

使用 php 函数utf8_encode($myvar);确实可以正确显示特殊字符。

标签: mysqlutf-8type-conversioniso-8859-1

解决方案


要转换表,请使用

ALTER TABLE ... CONVERT TO ...

或者,要单独更改列,请使用

ALTER TABLE ... MODIFY COLUMN ...

相反,你似乎做了一些不同的事情。如需进一步分析,请提供SELECT col, HEX(col) ...转换前后,以及使用的转换。

请参阅this中的“截断” 。在此处找到正确的修复程序,但取决于您从 HEX 中看到的内容。


推荐阅读