【问题标题】:MYSQL Concat not workingMYSQL Concat 不工作
【发布时间】:2011-07-03 08:30:28
【问题描述】:

更新配置文件集 favourties=CONCAT(favourties,"123") WHERE id=1

我想在 favourties 中附加 123,但如果 favourties 的默认值设置为 NULL,则此查询将不起作用。如果 favourties 设置为 NULL 然后附加 123 会查询什么

【问题讨论】:

    标签: mysql concatenation


    【解决方案1】:
    UPDATE profile SET favourties=CONCAT(IFNULL(favourties, ''),"123") WHERE id=1
    

    【讨论】:

      【解决方案2】:

      使用COALESCE 函数环绕字段:

      UPDATE profile
      SET favourties = CONCAT(COALESCE(favourties, ''),"123")
      WHERE id=1
      

      【讨论】:

        【解决方案3】:

        您可能无法将某些内容连接到 NULL。也许你可以使用coalesce

        UPDATE profile SET favourties=CONCAT(COALESCE(favourites,""),"123") WHERE id=1
        

        见:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

        您可以像@zerkms 所说的那样使用ifnull,但这不在SQL 标准中。虽然它有点快。在此链接上阅读它:http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/performance-isnull-vs-coalesce.aspx

        【讨论】:

          【解决方案4】:

          您还可以使用 CONCAT_WS() (docs) 来处理您所期望的 NULL:将它们转换为空字符串:

          UPDATE profile SET favourties = CONCAT_WS('', favourties, "123") WHERE id = 1;
          

          我个人现在实际上只使用CONCAT_WS(),因为不得不担心 NULL 让我烦恼。我很少使用 NULL,所以我不必担心它,只是以防万一。当它似乎没有意义时,弄清楚为什么你最终得到一个空字符串只是一件烦人的事情。

          【讨论】:

            【解决方案5】:

            在 PHP 中,我使用:

            SET `trans`=concat('$var', trans)
            

            添加到trans 列中的字符串。 如果在括号内不使用反引号 group ,它将无法在名为 group 的列上工作,而对于 trans,则不需要反引号。

            【讨论】:

              猜你喜欢
              • 2012-04-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-07
              • 1970-01-01
              • 1970-01-01
              • 2019-11-11
              相关资源
              最近更新 更多