【问题标题】:MySQL charset conversionMySQL 字符集转换
【发布时间】:2011-02-10 15:45:26
【问题描述】:

我有一个数据库,其中所有文本字段和表都明确指定了“utf8”作为默认字符集,但是该数据库中的数据存储为“cp1257”。只有当我使用SET NAMES 'cp1257'\C cp1257 时,我才能显示符号。尝试在没有这些指令的情况下显示它们会失败,因为它会尝试以“utf8”(?)的形式获取数据。我该怎么做才能将数据库的所有数据(可能是备份)作为“cp1257”并将其作为有效的“utf8”放回去?

【问题讨论】:

    标签: mysql unicode character-encoding internationalization


    【解决方案1】:

    您需要先将它们转换为二进制字段,然后将字段设置为 cp1257。这样 MySQL 将知道该字段存储在哪个字符集中:

    ALTER TABLE CHANGE `field` `field` BLOB;
    ALTER TABLE CHANGE `field` `field` TEXT CHARACTER SET 'cp1257';
    

    如果您想改变数据的存储方式,您现在可以将字段转换为任何字符集(MySQL 将在此步骤中进行数据转换):

    ALTER TABLE CHANGE `field` `field` TEXT CHARACTER SET 'utf8';
    

    【讨论】:

    • 感谢您的回答,我有很多这样的表,我可以在整个数据库上进行转换而不必转换每个表(甚至每个字段)吗?
    • 您不能在 SQL 中执行此操作,但您绝对可以在其他会生成 SQL 查询的内容中编写脚本。
    • 似乎有点复杂,第一行不起作用,可能是因为field 与 KEY(..) 一起使用。我正在考虑使用 mysqldump 的一个技巧,我已经成功地将我的数据库导出到 .sql 文件,我什至可以使用编辑器查看有效字符(如果我设置了 utf-8 编码选项)。所以文件是unicode ..我怎么能像现在一样导入数据?以通常的方式重新导入(mysql -u user -p database
    • 如果该字段原本是VARCHAR,则应该使用VARBINARY作为转换类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多