我最近搬到了我个人网站的另一个平台,我遇到了一个问题,以前的字符编码,如"""'现在被奇怪地重新编码为:

“
”
’
’
'

我以前见过这个,上次,我手动浏览并更新了每一篇文章。不过,这一次我想通过更新数据库来采取更务实的方法。
如何用这些字符串的正确字符替换所有出现的字符串?
我想应该是这样的:
SELECT REPLACE(''',''')

但我是否需要小心,并包括转义字符,如\?另外,如何在整个数据库中执行这种类型的替换?
注意:我将使用phpmyadmin来执行这些替换,所以我希望这只是在“sql”选项卡中键入一系列命令的问题。不过,如果有必要,我可以从命令行访问mysql服务器。
更新:
关于结构的更多信息:
表名为“field_data_comment_body”
字段名为“comment_body_value”
该字段属于“longtext”类型
我试过运行johan的建议,但它返回0个受影响的行:
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;

更新:这不是翻译错误,因为它返回63行:
SELECT  `comment_body_value`
FROM  `field_data_comment_body`
WHERE  `comment_body_value` LIKE  '%&amp;#039;%'
LIMIT 0 , 30

最佳答案

在mysql中,可以使用\对字符进行转义。
我会写一个函数来代替你,而不是做一个更新,像这样。

DELIMITER $$

CREATE FUNCTION FixEncoding(input varchar) RETURNS varchar
BEGIN
  DECLARE output varchar;

  SET output = input;
  SET output = REPLACE(output,'&#039;','\'');
  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;

关于mysql - 替换文本字符串MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6084958/

10-12 13:00
查看更多