不同算子

LIKE和=是不同的操作者。这里的大多数答案都集中在通配符支持上,这并不是这些操作符之间唯一的区别!

=是对数字和字符串进行操作的比较运算符。比较字符串时,比较运算符将整串.

LIKE比较的字符串运算符。逐字逐句.

让事情变得更复杂的是,两个操作符都使用了校对这对比较的结果有重要的影响。

激励实例

让我们首先确定一个例子,其中这些操作符产生明显不同的结果。请允许我引用MySQL手册:根据SQL标准,类似于在每个字符的基础上执行匹配,因此它可以产生与=比较操作符不同的结果:

mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;

+-----------------------------------------+

| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |

+-----------------------------------------+

|                                       0 |

+-----------------------------------------+

mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;

+--------------------------------------+

| 'ä' = 'ae' COLLATE latin1_german2_ci |

+--------------------------------------+

|                                    1 |

+--------------------------------------+

请注意,MySQL手册的这一页名为字符串比较函数,和=没有讨论,这意味着=不是严格意义上的字符串比较函数。

如何=工作?

这个SQL标准§8.2描述如何=比较字符串:两个字符串的比较如下:

(A)如果X的字符长度不等于Y字符的长度,则为比较起见,将较短的字符串有效地替换为其自身的副本,该副本已通过在一个或多个PAD字符的右侧级联扩展到较长字符串的长度,其中基于CS选择PAD字符。如果CS有no pad属性,那么pad字符是一个与实现相关的字符,它不同于X和Y字符集中任何比CS下的任何字符串都要小的字符。否则,衬垫字符是。

(B)用比较序列CS给出了X和Y的比较结果。

c)根据排序顺序的不同,即使两个字符串的长度不同或包含不同的字符序列,它们也可以比较为相等。当操作MAX、MIN、DISTISTION、对分组列的引用以及UNION(除了)和IntersectOperator引用字符串时,这些操作从一组相同值中选择的特定值与实现有关。

(强调后加)

这是什么意思?这意味着当比较字符串时,=运算符只是当前排序规则的一个薄包装器。排序规则是具有比较字符串的各种规则的库。这里有一个例子MySQL的二进制排序:static int my_strnncoll_binary(const CHARSET_INFO *cs __attribute__((unused)),

const uchar *s, size_t slen,

const uchar *t, size_t tlen,

my_bool t_is_prefix){

size_t len= MY_MIN(slen,tlen);

int cmp= memcmp(s,t,len);

return cmp ? cmp : (int)((t_is_prefix ? len : slen) - tlen);}

这种特殊的排序规则碰巧是逐字节比较的(这就是为什么它被称为“二进制”-它没有赋予字符串任何特殊的意义)。其他排序可能提供更高级的比较。

例如,这里有一个UTF-8校对这支持不区分大小写的比较。代码太长,无法粘贴到这里,但请转到该链接并阅读my_strnncollsp_utf8mb4()..这种排序规则可以一次处理多个字节,并且可以应用各种转换(例如不区分大小写的比较)。这个=运算符是从变化无常的校对中完全抽象出来的。

如何LIKE工作?

这个SQL标准§8.5描述如何LIKE比较字符串:

M LIKE P

如果存在将M划分为子字符串的情况,则为真:

(I)M的子串是M的0或多个连续s的序列,而M的每个都是一个子字符串的一部分。

(Ii)如果P的第一个子字符串说明符是任意字符说明符,则M的第一个子字符串是任意一个。

如果P的第一个子字符串说明符是任意的字符串说明符,那么M的第一个子字符串就是0或更多s的任意序列。

(Iv)如果P的第一个子字符串说明符既不是任意字符说明符,也不是任意字符串说明符,则根据的排序序列,M的第I子字符串等于该子字符串说明符,而不将字符附加到M中,并且与该子字符串说明符具有相同的长度。

(V)M的子串数等于P的子串说明符的个数。

(强调后加)

这句话很冗长,所以让我们把它分解一下吧。第二项和第三项指通配符_和%分别。如果P不包含任何通配符,则只有第四项适用。这就是“任择议定书”提出的令人感兴趣的情况。

在本例中,它比较每个“子字符串”(单个字符)M中的每个子字符串P使用当前排序规则。

结论

底线是当比较字符串时,=比较整个字符串LIKE每次比较一个字符。这两个比较都使用当前排序规则。这种差异在某些情况下会导致不同的结果,正如本文的第一个例子所证明的那样。

你应该用哪一种?没有人能告诉你-你需要用正确的用例。不要过早地通过切换比较操作符来优化。

vs简易计算机等于号代码,等于(=)vs.相关推荐

  1. matlab如何写不等于号,不等于号(不等于号可以往右写么)

    ≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠≠用只能ABC可以打出来,右击面版,选择数学符号,再按旁边的小键盘调出键盘界面,在里面找到不等于号就可以了!在VB里面的就是"<>". 怎么说 ...

  2. 51单片机实现简易计算机,Keil4代码Proteus工程一步到位

    目录 前言 Proteus硬件部分 键盘 程序部分 运算代码逻辑(代码解释) LCD屏幕显示运算结果 输入部分 键值判断部分 删除按键的实现 程序执行运算 前言 Hello,大家好.想做关于嵌入式的一 ...

  3. java编程细节总结(一):等于号的作用

    很多人在编程的过程中有很多的疑问,比如说等于号,等于号谁都知道是由赋值的作用,那也仅仅对于变量而已,那对于对象呢? 好了,废话不多说.下面是小编的总结. 一.对变量而言 等于号具有赋值的作用,比如说a ...

  4. 用计算机摇号算不算随机抽样,专家解读摇号原理:随机抽不等于随意抽(2)

    "操作上讲只要根据随机的方法产生种子,就没问题" 丁文兴:要保证抽样过程公平的难点,还在于产生随机数种子的时候,要保证随机性.因为计算机不像骰子,它是一个暗箱,大家会觉得其中可能有 ...

  5. python3不等于号_python中的不等于号是什么

    python中的不等于号用!=表示.Python支持的比较运算符如下图所示 比较运算符,也成关系运算符,用于对常量.变量或表达式的结果进行大小.真假等比较,如果比较结果为真,则返回 True:反之,则 ...

  6. python中不等于号_python的不等于号是什么

    python中的不等于号用!=表示.Python支持的比较运算符如下图所示 比较运算符,也成关系运算符,用于对常量.变量或表达式的结果进行大小.真假等比较,如果比较结果为真,则返回 True:反之,则 ...

  7. python两个小于号什么意思_python中的不等于号是什么

    python中的不等于号用!=表示.Python支持的比较运算符如下图所示 比较运算符,也成关系运算符,用于对常量.变量或表达式的结果进行大小.真假等比较,如果比较结果为真,则返回 True:反之,则 ...

  8. 前端传输JSON格式数据 居然尾随了一个等于号...

    问题: 项目中 前端传JSON数据到后端接口时 数据尾部多了一个等于号 解决办法: 前端 设置请求体类型 以及 数据格式 后端也要指定 接受数据 的格式 在写前后端接口的时候,我的前端将表单的数据封装 ...

  9. java中三个等号_Java细节:单等于号、双等于号、三等于号的作用及双等于号和equls的区别...

    我们在编程时总是会用到=或==,但是等于号都有什么作用呢?下面我们来看一下 (注:下文会提及一点常量池.堆栈,由于本人了解还不是透彻,暂不做解释,日后会做总结,可先点击字面查看理解) 一.单等于号的作 ...

最新文章

  1. DTrace memory leak 内存泄露
  2. Struts2笔记——result结果类型
  3. Android之在Layout中自定义View
  4. Gradle的script API
  5. 20181123_任务(套件培训)
  6. python multiprocessing 得到多进程返回的结果
  7. Java游戏用户登录注册_Java实现多用户注册登录的幸运抽奖
  8. C语言 · 9-1九宫格
  9. linux的增删改查、压缩与解压缩
  10. liger UI tree DATA添加值
  11. 真正的mybatiesPlus一键生成模板(根据对象增删改查分页的controller完善)详
  12. 表单数据序列化,后台如何接收(java)
  13. c语言中取反的作用,一位取反 硬件实现_c语言按位取反什么意思
  14. ubuntu安装nvidia显卡驱动
  15. 如果小米开放购买会怎么样?
  16. python重复import_Python 中循环 import 造成的问题如何解决?
  17. 阿里云OSS图片缩放处理
  18. 如何定向网件路由防火墙与URL
  19. python怎么找出最大数,python怎么找出最大数
  20. Python爬取虎牙主播图片

热门文章

  1. 惠普g260鼠标宏软件_黑爵电竞鼠标AJ337 电竞手残党福音 鼠标宏一键火力全开
  2. [python]---从java到python(03)---爬虫
  3. python中的demo_python中简单工厂实现demo
  4. 小米SN保修_首次体验小米手机官方售后全程回顾:维修速度快服务态度好
  5. python最常用的编程方式是什么_python常用模块和对象编程
  6. JAVA入门级教学之(内存地址的引用示例)
  7. JAVA入门级教学之(JDK安装-JDK、JRE、JVM)
  8. go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现
  9. 467python教程_Magnus Lie Hetland的《Python基础教程(第3版)》自学笔记(持续更新中)...
  10. 一行代码蒸发64亿人民币!黑客盯上区块链漏洞!Python真的变态!