我最近搬到了我个人网站的另一个平台,我遇到了以前编码"
,""
和{{1}等字符的问题现在被奇怪地重新编码为:
'
我之前见过这个,上次,我手动完成了每篇文章的更新。但是,这一次,我想通过更新数据库采取更务实的方法。
我如何用正确的字符替换这些字符串的所有出现?
我认为它会像:
“
”
’
’
'
但我是否需要谨慎并包含SELECT REPLACE(''',''')
之类的转义字符?另外,我如何在整个数据库中执行此类替换?
注意:我将使用phpMyAdmin来执行这些替换,所以我希望只需在“SQL”选项卡中输入一系列命令即可。虽然,如果有必要,我可以从命令行访问MySQL服务器。
更新
有关结构的更多信息:
我尝试过运行Johan的建议,但它会返回0个受影响的行:
\
更新:这不是翻译错误,因为这会返回63行:
DELIMITER $$
CREATE FUNCTION FixEncoding(input longtext) RETURNS longtext
BEGIN
DECLARE output longtext;
SET output = input;
SET output = REPLACE(output,''','\'');
SET output = REPLACE(output,'’','\'');
SET output = REPLACE(output,'” ','"');
SET output = REPLACE(output,'“','"');
SET output = REPLACE(output,'’','\'');
RETURN output;
END $$
DELIMITER ;
UPDATE field_data_comment_body SET comment_body_value = FixEncoding(comment_body_value) WHERE entity_id <> 0;
答案 0 :(得分:3)
在MySQL中,可以使用\
转义字符。
我会编写一个函数来替换你,而不是做更新,就像这样。
DELIMITER $$
CREATE FUNCTION FixEncoding(input varchar) RETURNS varchar
BEGIN
DECLARE output varchar;
SET output = input;
SET output = REPLACE(output,''','\'');
SET output = REPLACE(output, .....
.....
RETURN output;
END $$
DELIMITER ;
UPDATE table1 SET column1 = FixEncoding(Column1) WHERE id <> 0;
如果这不起作用,那么您可能会遇到数据库和表示层之间的翻译问题 对数据库进行备份 并使用以下命令更改表的编码:
ALTER TABLE `test`.`test` CHARACTER SET latin1 COLLATE latin1_general_ci;