MySQL的意想不到的结果

68 阅读1分钟

文章意在学习交流分享,如有错误,还请提出见解;如果转载原创文章请注明出处;如有侵权请联系删除;此文内容若含有机密信息,请不要擅自使用相关信息或转发给任何人,不然需要负法律责任,并请告知相关人及时删除并修改机密信息,网络环境复杂,可能存在不良导航链接等,请注意网络安全,后果自负,谢谢。

1690870876523.png

当涉及到MySQL的意想不到的结果时,以下是一些常见的例子:

1. 字符串和数字比较:

   - SELECT '123' = 123; -- 结果为1,MySQL在比较时会将字符串转换为数字,然后进行比较。

2. NULL值的处理:

   - SELECT NULL = NULL; -- 结果为NULL,因为在MySQL中,NULL与任何值的比较都会返回NULL。

   - SELECT NULL <> NULL; -- 结果为NULL,同样,NULL与任何值的不相等比较也会返回NULL。

3. 字符串连接:

   - SELECT CONCAT('Hello', NULL); -- 结果为NULL,如果将NULL与字符串连接,结果也会变为NULL。

4. 类型转换:

   - SELECT '2023-07-25' + 0; -- 结果为2023,MySQL会将字符串转换为数字进行加法运算。

5. 小数精度:

   - SELECT 0.1 + 0.2; -- 结果为0.30000000000000004,由于浮点数精度的限制,计算结果可能会略有偏差。

6. 隐式类型转换:

   - SELECT '1a' + 1; -- 结果为2,MySQL会将字符串中的数字部分转换为数字后进行运算。

这些示例展示了MySQL中一些意想不到的结果,因此在编写查询语句时,需要注意类型转换、NULL值的处理以及字符集的影响。请根据具体需求和情况谨慎使用,确保结果符合预期。

7 . 以空格结尾的字符串:

  1. SELECT ‘hello’ = 'hello '; – 结果为1,MySQL默认会忽略字符串末尾的空格进行比较。

****8 . 不区分大小写的比较:

  1. SELECT ‘apple’ = ‘Apple’; – 结果为1,使用默认的排序规则,字符比较是不区分大小写的。

9. 空值的比较:

  1. SELECT NULL = ‘abc’; – 结果为NULL,与NULL进行比较的结果是无法确定的。

10. 指定二进制排序规则:

  1. SELECT BINARY ‘a’ = ‘A’; – 结果为0,BINARY关键字强制MySQL以二进制方式进行比较,所以大小写会被区分。
  2. SELECT BINARY ‘abc’ > BINARY ‘ABD’; – 结果为0,同样,使用BINARY进行二进制比较。

来自公众号:纯洁的架构师

image.png