替换文本字符串MySQL

时间:2011-05-21 22:57:38

标签: mysql sql phpmyadmin

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

'

我之前见过这个,上次,我手动完成了每篇文章的更新。但是,这一次,我想通过更新数据库采取更务实的方法。

我如何用正确的字符替换这些字符串的所有出现?

我认为它会像:

“
”
’
’
'

但我是否需要谨慎并包含SELECT REPLACE(''',''') 之类的转义字符?另外,我如何在整个数据库中执行此类替换?

注意:我将使用phpMyAdmin来执行这些替换,所以我希望只需在“SQL”选项卡中输入一系列命令即可。虽然,如果有必要,我可以从命令行访问MySQL服务器。

更新

有关结构的更多信息:

  • 表名为“field_data_comment_body”
  • 字段名称为“comment_body_value”
  • 相关字段的类型为“longtext”

我尝试过运行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;

1 个答案:

答案 0 :(得分:3)

在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;