【问题标题】:How to convert from windows-1257 to utf-8 (mysql)如何从 windows-1257 转换为 utf-8 (mysql)
【发布时间】:2011-11-03 09:42:49
【问题描述】:

我正在寻找解决编码问题的帮助,我已经苦苦挣扎了几天了。

我有一个排序规则为“latin1_swedish_ci”的数据库。当我查看单个条目时,它会显示一个混乱的文本

grieþos informçs

应该是

griežos informēs

好的...我尝试使用php脚本将文本输出到浏览器并设置

<meta http-equiv="Content-Type" content="text/html; charset=windows-1257" />

现在...它正确显示数据(“griežos informēs”)。我需要做的是将此数据转换为 UTF-8 以便我可以使用

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

并正确显示所有内容。

我尝试使用 Notepad2 并创建一个编码为 windows-1257 的文件,然后从数据库中复制文本并保存它......同样的问题。

甚至尝试使用 utf-8 排序规则在该数据库中创建一个表并在其中插入数据......没有运气 - 只是显示?特殊字符应该在哪里。

任何帮助将不胜感激,

谢谢

【问题讨论】:

    标签: mysql encoding utf-8 character-encoding


    【解决方案1】:
    SELECT CAST(_cp1257_general_ci'test' AS CHAR CHARACTER SET utf8);
    

    (test是列名)

    这将使您获得正确字符集中的行。您应该使用 UTF8 创建一个新表,然后 SELECT CAST(....) FROM old_table INTO new_table

    您可能还想将旧表的字符集更改为 cp1257_general_ci 而不是 latin1_swedish_ci。

    为了做到不丢失数据首先将列的数据类型更改为blob,然后使用cp1257_general_ci将其第二次更改为varchar,最后第三次更改为utf8_unicode_ci(我建议先备份,只需以防万一。)

    【讨论】:

    • 不,我的意思是第二次了 :( 抱歉。我更新了答案。
    【解决方案2】:

    在打开与数据库的连接后立即使用此查询,以便在每次页面加载时运行一次:

        mysql_query('SET NAMES `utf8`');
    

    【讨论】:

    • 这对他没有帮助,因为该列定义的字符集与实际数据的字符集不匹配,因此MySQL将无法将其转换为utf8。
    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多