【问题标题】:Replace a word in BLOB text by MySQL用 MySQL 替换 BLOB 文本中的单词
【发布时间】:2011-04-27 08:11:35
【问题描述】:

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

不幸的是,我尝试用香蕉字打印所有行,但没有成功。

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

请帮帮我。

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

【问题讨论】:

    标签: mysql select replace blob


    【解决方案1】:

    取决于您所说的“替换”;使用替换在选择中显示修改后的文本:

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

    或者更新表中的数据:

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

    顺便说一句。你为什么用blob 来写文字?对于文本数据,您应该使用 text 类型,对于二进制数据应该使用 blob

    【讨论】:

    • 在某些情况下需要保存文本BLOB。就我而言,无论出于何种原因,Drupal 7 开发人员都选择对所有 TEXT 列使用 blob - 通常这是开发人员无法控制的。
    • 如果您想支持所有语言,则可能需要BLOB。可能是。对于大多数语言TEXT 很好。使用BLOB 时,您失去了很多功能,因为基本上文本不被视为文本服务器端。这就是为什么我会推荐使用TEXT。如果某些语言仍然存在一些问题,那么它们可能会在 MySQL 服务器中得到修复。
    • @Nux:如果只需要替换一次香蕉而不是全部,假设它在位置 2380 怎么办。如何做到这一点
    • 如果它在一个已知的位置,那么你可以用 substr 或类似的东西分割字符串。看看:dev.mysql.com/doc/refman/5.0/en/string-functions.html
    • @Nux:问题是即使指定了字符串的位置,replace 也会更新所有出现的位置。但是,当您对选择查询使用相同的值时,它只会在一次出现时显示更新的值
    【解决方案2】:

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

    要将 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

    【讨论】:

      【解决方案3】:

      您使用的是哪个版本?也许是这个错误:http://bugs.mysql.com/bug.php?id=27。 否则请尝试cast 您的 blob 列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-20
        • 1970-01-01
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-02
        • 2011-09-06
        • 1970-01-01
        相关资源
        最近更新 更多