文章意在学习交流分享,如有错误,还请提出见解;如果转载原创文章请注明出处;如有侵权请联系删除;此文内容若含有机密信息,请不要擅自使用相关信息或转发给任何人,不然需要负法律责任,并请告知相关人及时删除并修改机密信息,网络环境复杂,可能存在不良导航链接等,请注意网络安全,后果自负,谢谢。
当涉及到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 . 以空格结尾的字符串:
- SELECT ‘hello’ = 'hello '; – 结果为1,MySQL默认会忽略字符串末尾的空格进行比较。
****8 . 不区分大小写的比较:
- SELECT ‘apple’ = ‘Apple’; – 结果为1,使用默认的排序规则,字符比较是不区分大小写的。
9. 空值的比较:
- SELECT NULL = ‘abc’; – 结果为NULL,与NULL进行比较的结果是无法确定的。
10. 指定二进制排序规则:
- SELECT BINARY ‘a’ = ‘A’; – 结果为0,BINARY关键字强制MySQL以二进制方式进行比较,所以大小写会被区分。
- SELECT BINARY ‘abc’ > BINARY ‘ABD’; – 结果为0,同样,使用BINARY进行二进制比较。
来自公众号:纯洁的架构师