MySQL concat()和lower()怪异

sha*_*nus 8 mysql

知道为什么这个工作明智*:

mysql> select lower('AB100c');
+-----------------+
| lower('AB100c') |
+-----------------+
| ab100c          |
+-----------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

但这不是吗?

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

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

Har*_*Joy 7

正如MySql String函数所述:


LOWER(STR)

当应用于二进制字符串(BINARY,VARBINARY,BLOB)时,LOWER()无效.


CONCAT(STR1,STR2,...)

返回连接参数产生的字符串.可能有一个或多个参数.如果所有参数都是非二进制字符串,则结果为非二进制字符串.如果参数包含任何二进制字符串,则结果为二进制字符串. 数字参数被转化为它的 等效二进制串形式; 如果你 想避免这种情况,可以使用 显式类型转换.


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

select lower(concat('A', 'B', '100','C'));
Run Code Online (Sandbox Code Playgroud)