mysql处理'''

时间:2012-08-27 00:35:57

标签: mysql

MySQL声明

mysql> select * from field where dflt=' '

似乎与空值匹配;与声明不同

mysql> select * from field where concat('_',dflt,'_') = '_ _';

我在MySQL参考中找不到这种行为的描述。我怎样才能让MySQL解释 字面输入?

EDITED:这确实不匹配NULL值,但它确实匹配空值。

2 个答案:

答案 0 :(得分:2)

The CHAR and VARCHAR Types中所述:

  

所有MySQL排序规则都是PADSPACE类型。这意味着MySQL中的所有CHARVARCHAR值都会进行比较,而不考虑任何尾随空格。

LIKE运算符的定义:

  

特别是,尾随空格很重要,但对于CHAR运算符执行的VARCHAR=比较则不然:

this answer中所述:

  

此行为在SQL-92和SQL:2008中指定。为了进行比较,较短的字符串被填充到较长字符串的长度。

     

从草案(8.2<比较谓词>):

     
    

如果X的字符长度不等于Y的字符长度,那么为了比较的目的,较短的字符串被有效地替换为已经延长到较长的长度的自身的副本。字符串通过串联在一个或多个填充字符的右侧,其中填充字符是基于CS选择的。如果CS具有NO PAD特性,则填充字符是与实现有关的字符,不同于X和Y字符集中的任何字符,其整理的字符串少于CS下的任何字符串。否则,填充字符是< space>。

  
     

除了其他优秀的解决方案:

select binary 'a' = 'a   '

答案 1 :(得分:1)

我找不到任何文档,但众所周知,在进行文本比较时会忽略尾随空格。

要强制进行文字匹配,请尝试以下操作:

select *
from field
where dflt = ' '
and length(dflt) = 1; // length does not ignore trailing spaces