MySQL concat()和lower()怪异

时间:2011-05-06 04:06:45

标签: mysql

任何想法为什么这样做合理*:

mysql> select lower('AB100c');
+-----------------+
| lower('AB100c') |
+-----------------+
| ab100c          |
+-----------------+
1 row in set (0.00 sec)

但这不是吗?

mysql> select lower(concat('A', 'B', 100,'C'));
+----------------------------------+
| lower(concat('A', 'B', 100,'C')) |
+----------------------------------+
| AB100C                           |
+----------------------------------+
1 row in set (0.00 sec)

*明智地='我认为应该有效的方式。'

3 个答案:

答案 0 :(得分:7)

正如MySql String functions所述:


  

<强> LOWER(STR)

     

LOWER()在应用时无效   二进制字符串(BINARY,VARBINARY,   BLOB)。


  

<强> CONCAT(STR1,STR2,...)

     

返回由此产生的字符串   连接参数。可能有   一个或多个参数。我摔倒   参数是非二进制字符串,   result是一个非二进制字符串。如果   参数包括任何二进制字符串   结果是二进制字符串。的 A    数字参数转换为    等效的二进制字符串形式;如果你    想要避免这种情况,您可以使用    显式类型广告。


在您的代码中,您将100作为数字传递,因此concat将返回二进制字符串,并且当应用于二进制字符串时,lower是无效的,这就是它未被转换的原因。如果你想转换你可以试试这个:

select lower(concat('A', 'B', '100','C'));

答案 1 :(得分:2)

lower用于将STRINGS转换为小写。但您的值100被视为数字。如果您仍希望获得小写转换的结果,则应将数字括在引号中,如下所示:

select lower(concat('A', 'B', '100','C'));

我已经对此进行了测试,效果很好。

答案 2 :(得分:-1)

这是另一个使用CONCAT和LIKE的例子

LOWER(CONCAT(firstname, ' ', lastname)) LIKE LOWER('%my name%')