标准免责声明:对于MySQL,我完全不知道。我尝试做事的方式几乎肯定不聪明,我愿意接受改进建议。
我有两个数据库:wordpress
和wordpress3
。 wordpress3
是wordpress
的副本,已转换为UTF-8。但是,在转换过程中,错误编码的字符会导致数据丢失。
找到wordpress.wp_options
中的所有条目,其中编码为UTF-8的option_value
与编码为ASCII时的wordpress3.wp_options
不同。
对于上述#1描述的每个条目,使用wordpress
中的数据更新option_values
中的相应条目,转换为UTF-8。
我正在检查并立即替换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}}
......但那很慢而且笨重。
谢谢!
答案 0 :(得分:0)
我使用INNER JOIN
加入了两个表格wordpress.wp_options wp
和wordpress3.wp_options wp3
)并仅选择wp.option_id
和wp3.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);
这似乎已经成功了。