"hello ", "hello"-6ren">
gpt4 book ai didi

MySQL空间比较 hell

转载 作者:行者123 更新时间:2023-11-30 23:05:19 26 4
gpt4 key购买 nike

为什么这个查询:

SELECT 
"hello" = " hello",
"hello" = "hello ",
"hello" <> "hello ",
"hello" LIKE "hello ",
"hello" LIKE "hello%"

返回这些结果:

"hello" = " hello"         -> 0
"hello" = "hello " -> 1
"hello" <> "hello " -> 0
"hello" LIKE "hello " -> 0
"hello" LIKE "hello%" -> 1

特别是,我期待 "hello" = "hello "成为false"hello" <> "hello "成为true (在这种情况下,LIKE 的行为完全符合我的要求)。

为什么 MySQL 以这种任意且不一致的方式比较空间? (例如在 "hello" = " hello" 上返回 0,在 "hello" = "hello " 上返回 1)。

有什么方法可以配置 MySQL 始终在“严格模式”下工作(换句话说,让它在 varchar/text 比较中始终表现得像 LIKE)?

遗憾的是,我使用的是专有框架,我不能强制它始终使用 LIKE在文本比较或修剪所有输入的查询中。

最佳答案

  • "hello" = " hello" -- 0 ,
    因为不是完全匹配
  • "hello" = "hello " -- 1 ,
    因为 varchar 类型忽略尾随空格
  • "hello" <> "hello " -- 0 ,
    因为 varchar 类型忽略尾随空格
  • "hello" LIKE "hello " -- 0 ,
    因为 varchar 类型和 LIKE 忽略尾随空格在每个字符的基础上执行匹配
  • "hello" LIKE "hello%" -- 1 ,
    因为是部分模式匹配

如果要严格检查,可以使用binary关于要比较的值。

mysql> select binary('hello')=binary('hello ') bin_eq, 'hello'='hello ' eq;
+--------+----+
| bin_eq | eq |
+--------+----+
| 0 | 1 |
+--------+----+

引用:

关于MySQL空间比较 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167982/

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