gpt4 book ai didi

mysql - 在 mysql 中搜索具有 `|` 字符作为其值的列

转载 作者:行者123 更新时间:2023-11-29 04:33:42 25 4
gpt4 key购买 nike

a 作为表 b 中的列,我想了解为什么搜索为 a=0 条件获取一行!

mysql> select * from (select "0|679501|3371371|0" as a) b where a=0;
+--------------------+
| a |
+--------------------+
| 0|679501|3371371|0 |
+--------------------+
1 row in set, 2 warnings (0.00 sec)

mysql> select * from (select "079501|3371371|0" as a) b where a=0;
Empty set, 1 warning (0.04 sec)

mysql> select * from (select "None|679501|3371371|0" as a) b where a=0;
+-----------------------+
| a |
+-----------------------+
| None|679501|3371371|0 |
+-----------------------+
1 row in set, 2 warnings (0.00 sec)

mysql> select * from (select "null|679501|3371371|0" as a) b where a=0;
+-----------------------+
| a |
+-----------------------+
| null|679501|3371371|0 |
+-----------------------+
1 row in set, 2 warnings (0.00 sec)

mysql> select * from (select "679501|null|3371371|0" as a) b where a=0;
Empty set, 1 warning (0.01 sec)

提前致谢!

最佳答案

结果与您使用的分隔符是 | 无关。 .任何非数字字符都一样。同样,null 都不是也不None在这种情况下是特殊的。这可以是任何字符串。

在表达式中,0="0|679501|3371371|0" ,MySQL 正在对字符串执行“字符串到 int”并与 0 进行比较。它的行为类似于 atoi 的方式。在 C 中工作。解析在第一个非数字字符处停止。如果字符串不以数字字符开头,则返回 0。

您可以使用以下查询简化对行为的检查:

> select 0="0|1|2";
+-----------+
| 0="0|1|2" |
+-----------+
| 1 |
+-----------+
1 row in set, 1 warning (0.00 sec)

"0|1|2"转换为整数是 0。解析停止在 | .比较 0=0 得到 1。

> select 0="0x1x2";
+-----------+
| 0="0x1x2" |
+-----------+
| 1 |
+-----------+
1 row in set, 1 warning (0.00 sec)

"0x1x2"转换为整数是 0。解析停止在 | .比较 0=0 得到 1。

> select 0="1|2|0";
+-----------+
| 0="1|2|0" |
+-----------+
| 0 |
+-----------+
1 row in set, 1 warning (0.00 sec)

"1|2|0"转换为整数是 1。解析停止在 | .比较 0=1 得到 0。

> select 1="1x2x0";
+-----------+
| 1="1x2x0" |
+-----------+
| 1 |
+-----------+
1 row in set, 1 warning (0.00 sec)

"1x2x0"转换为整数是 1。解析停止在 | .比较 1=1 得到 1。

> select 0="null|1|2";
+--------------+
| 0="null|1|2" |
+--------------+
| 1 |
+--------------+
1 row in set, 1 warning (0.00 sec)

"null|1|2"转换为整数的结果为 0,因为字符串不以数字开头并且解析会立即停止。默认值为 0。比较 0=0 得到 1。

> select 0="foo|1|2";
+-------------+
| 0="foo|1|2" |
+-------------+
| 1 |
+-------------+
1 row in set, 1 warning (0.00 sec)

"foo|1|2"转换为整数的结果为 0,因为字符串不以数字开头并且解析会立即停止。默认值为 0。比较 0=0 得到 1。

关于mysql - 在 mysql 中搜索具有 `|` 字符作为其值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50950114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com