2010-10-19 39 views
7

我有一个巨大的mysql表(称为tcountriesnew)和一列(称为slogen, blob type)。 在每个slogen blob中,我想替换一个单词,例如:bananaapple用MySQL替换BLOB文本中的单词

不幸的是,我试图用word香蕉打印所有的行,并没有奏效。

select * from tcountriesnew where slogen like '%banana%';

请帮帮我。

  • 我错过了什么,我的查询有什么问题?
  • 如何替换blob中的文本?

回答

7

取决于你所说的 “替换” 节目中选择的意思:

select replace(slogen, 'bananas', 'apples') from tcountriesnew where slogen like '%bananas%'; 

或更新数据表中的:

update tcountriesnew set slogen=replace(slogen, 'bananas', 'apples') where slogen like '%bananas%'; 

BTW。为什么你使用blob作为文本?您应该使用text类型的文本数据和blob二进制数据。

+1

在某些情况下,它是需要保存的文本BLOB。就我而言,无论出于何种原因,Drupal 7开发人员都选择将blob用于所有TEXT列 - 通常这是开发人员无法控制的。 – Druvision 2013-05-26 14:20:43

+0

如果你想支持任何所有的语言,那么可能需要'BLOB'。也许。对于大多数语言来说'TEXT'很好。当使用'BLOB'时,你会放松很多功能,因为文本本质上不被视为文本服务器端。这就是为什么我会推荐使用'TEXT'。如果某些语言仍然存在一些问题,那么无论如何他们可能会在MySQL服务器中修复。 – Nux 2013-05-26 14:52:56

+0

@Nux:如果只有一次香蕉需要更换,而不是所有人都说它位于2380位。如何做到这一点 – Learner 2014-08-05 07:14:00

0

您使用的是哪个版本?也许这是这个bug:。 否则请尝试cast blob列。

1

在某些情况下,需要保存文本BLOB。就我而言,无论出于何种原因,Drupal 7开发人员都选择将blob用于所有TEXT列 - 这不受开发人员的控制。

要将blob转换为文本,请使用MySql转换函数。然后,您必须将其保存到数据库中并将其再次转换为blob - 但这是由MySQL自动处理的。所以下面的查询可以做到这一点:

UPDATE tcountriesnew 
SET slogen = replace(CONVERT(slogen USING utf8), 'bananas', 'apples') 
WHERE slogen LIKE '%bananas%'; 

在MySQL 5.5上,这完全解决了我的问题。

此外,configure your PhpMyAdmin to show Blob data