【问题标题】:Comparing empty strings if it is not equal to MySQL column with string values比较空字符串,如果它不等于 MySQL 列与字符串值
【发布时间】:2017-11-04 11:19:49
【问题描述】:

我不确定这种情况是否仅与 Coldfusion 或 Mysql 有关。

如果将 TEXT 类型的列与不相等的空字符串值进行比较,则此代码有效:

column > ""

但不是这个:

column != ""

在我的 SQL 代码中,假设具有 TEXT 类型的数据库列附件中包含字符串。 Input Attachment (:attachment)的Form值是空的(我想应该是指"")。

attachment = ( 
    CASE 
        WHEN :attachment = "" AND attachment = "" 
            THEN 1 
        WHEN :attachment = "" AND attachment != "" 
            THEN 2 
        WHEN :attachment != "" AND attachment = "" 
            THEN 3
        WHEN :attachment != "" AND attachment != "" 
            THEN 4 
        ELSE attachment 
    END 
)

此代码将返回附件 = 3。

但是,如果我使用这个 SQL 代码:

attachment = ( 
    CASE 
        WHEN :attachment = "" AND attachment = "" 
            THEN 1 
        WHEN :attachment = "" AND attachment > "" 
            THEN 2 
        WHEN :attachment > "" AND attachment = "" 
            THEN 3
        WHEN :attachment > "" AND attachment > "" 
            THEN 4 
        ELSE attachment 
    END 
)

此代码返回附件 = 2,这是我真正期望的。

那么,比较列是否相等或不等于空字符串的最佳方法是什么?我很少使用 NULL 值,因为当保存 FORM 时,它们输入的是空字符串。

【问题讨论】:

  • 不要使用双引号来比较数据库中的字符串,然后全部改为单引号并再次测试!
  • 为什么不能使用双引号? @JorgeCampos
  • @Pyromonk 我正在检查它是否不相等,而不是是否相等。我检查了您标记的链接,但似乎没有找到我问题的确切答案。
  • SQL ANSI 标准。双引号用于标识符,就像您正在创建新列名一样。单引号用于字符串比较。

标签: mysql string coldfusion-2016


【解决方案1】:

我相信您应该使用 而不是 != 并且还应该使用单引号而不是双引号,例如

WHEN :attachment <> '' AND attachment <> ''

【讨论】:

  • 这些东西实际上都不应该在 MySQL 方言中相关。除非服务器启用了ANSI_QUOTES,否则接受字符串的双引号,如果启用,这些查询将引发错误。对于不等式,!=&lt;&gt;equivalent
【解决方案2】:

警告:切勿使用column &gt; ''

我刚刚遇到了一些使用 MySql 5.7 的案例,其中 column &gt; '' 导致 FALSE, 但column &lt; '' 的结果是 TRUE!!

所以最好检查LENGTH(column)

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 2023-03-15
    • 1970-01-01
    • 2010-10-06
    • 2013-08-06
    • 2015-11-06
    • 1970-01-01
    • 2016-04-19
    • 2016-04-22
    相关资源
    最近更新 更多