代码之家  ›  专栏  ›  技术社区  ›  Tom

使用SQL替换修复字符编码错误可以吗?

  •  0
  • Tom  · 技术社区  · 16 年前

    问题出在DB级别,因此我打算运行以下SQL语句:

    update wp_posts set post_content = replace(post_content, ‘£’, ‘£’);
    

    这会是愚蠢的吗?


    背景信息(无需阅读):

    我不知道。该博客经历了各种更新(包括Wordpress版本2.1.3,默认表字符集从latin1更改为utf8),并被迁移到各种机器,我猜Wordpress一定在某个时候将UTF-8编码字符写入了具有latin1字符集的数据库,反之亦然。我知道我应该更加小心(是的,我读过 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) ).

    我如何确保这种情况不再发生? 我已经确保我的编码是一致的。所有MySQL表都使用字符集utf-8和blog页面集的HEAD部分 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    4 回复  |  直到 16 年前
        1
  •  2
  •   David Rabinowitz    16 年前

    应该没问题。最好的办法是:

    • 转储你的博客数据库
    • 将其加载到另一个db
    • 检查!
        2
  •  2
  •   Guffa    16 年前

    嗯,我想说这可能是这个问题的最佳“解决方案”。

    由于数据是使用错误的编码存储在线路的某个位置,原始数据将丢失,因此没有真正的解决方案。你只需要试着从你所拥有的损坏数据中挽救你所能得到的。

    如果它只是孤立的一个字符,你是幸运的。可能存在无法转换为任何可用字符的字节码,因此,如果这种情况发生在无法识别字符组合的任何地方,您只需将一个字符替换为另一个或缺少的字符即可。只有手动才能发现。

        3
  •  1
  •   josx    15 年前

    确保您有一种编码的数据和另一种编码的表。您可以在mysql中解决这个问题。 Check here

        4
  •  0
  •   rmn    16 年前

    不要那样做! 如果确实需要,请在更新/插入时使用触发器。