如何设置此MySQL UPDATE操作的范围?

时间:2015-03-04 03:48:09

标签: mysql

标准免责声明:对于MySQL,我完全不知道。我尝试做事的方式几乎肯定不聪明,我愿意接受改进建议。

我有两个数据库:wordpresswordpress3wordpress3wordpress的副本,已转换为UTF-8。但是,在转换过程中,错误编码的字符会导致数据丢失。

我的目标:

  1. 找到wordpress.wp_options中的所有条目,其中编码为UTF-8的option_value与编码为ASCII时的wordpress3.wp_options不同。

  2. 对于上述#1描述的每个条目,使用wordpress中的数据更新option_values中的相应条目,转换为UTF-8。

  3. 我正在检查并立即替换wp_options update wordpress3.wp_options wp3 SET wp3.option_value = (SELECT CONVERT(wp.option_value using UTF8) from wordpress.wp_options wp WHERE convert(wp.option_value using ascii) != convert(wp.option_value using utf8) AND wp.option_id = wp3.option_id) WHERE [?] 列作为概念验证。一旦我开始工作,我想重新调整这个东西,以便它为数据库中所有表中的所有列执行此操作......但这比我自己更先进。

    我的剧本:

    wp3.option_value

    我的问题:

    我不知道如何为UPDATE命令编写WHERE语句(因此[?])。在WHERE语句中没有任何内容,我的脚本将按照我希望它们更新的方式匹配和更新七行...但是对于与子查询不匹配的所有内容,option_name将被设置为NULL。

    我可以明确地定义WHERE,使用WHERE wp3.option_name = 'shortcoder_data'; 来获取我知道需要替换的选项,如下所示:

    {{1}}

    ......但那很慢而且笨重。

    谢谢!

1 个答案:

答案 0 :(得分:0)

我使用INNER JOIN加入了两个表格wordpress.wp_options wpwordpress3.wp_options wp3)并仅选择wp.option_idwp3.option_id相同的条目,但convert(wp.option_value using ascii)convert(wp.option_value using utf8)不同:

UPDATE wordpress3.wp_options wp3
INNER JOIN wordpress.wp_options wp ON (wp.option_id = wp3.option_id
    AND convert(wp.option_value using utf8) != convert(wp.option_value using ascii))
SET wp3.option_value = convert(wp.option_value using utf8);

这似乎已经成功了。