MySQL 字符串和数值比较、字符串与字符串比较

一、字符串与数字比较

MySQL字符串和数字比较的坑:比较时会把字符串类型转成整数类型,从首字母开始,遇到非数字类型后终止

原文:

Comparison operations result in a value of 1 (TRUE), 0 (FALSE), or NULL. These operations work for both numbers and strings. Strings are automatically converted to numbers and numbers to strings as necessary.

也就是说在比较的时候,String是可能会被转为数字的。

对于数据开头的字符串,转成数字后会自动丢弃后面的字母部分,只留下纯数字进行比较。

对于没有数字的那些字符串,与数值进行比较的时候,就只剩下0去和其他数值进行比较了

 

注:其实字符串和数值比较最大的坑在于:它会导致查询不能用到索引,直接就影响了查询的效率。

1、对于开头部分不能截取出数字的字符串来说,转换的结果自然就是0了。就只剩下0去和其他数值进行比较了。
mysql> select 'abc'=0;
+---------+
| 0='abc' |
+---------+
|       1 |
+---------+
1 row in set, 1 warning (0.00 sec)

mysql> SELECT "a2bc"<2;
+----------+
| "a2bc"<2 |
+----------+
|        1 |
+----------+
1 row in set, 1 warning (0.01 sec)

2、对于数据开头的字符串,转成数字后会自动丢弃后面的字母部分,只留下纯数字进行比较。
mysql> select 11>'010abc';
+-------------+
| 11>'010abc' |
+-------------+
|           1 |
+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> select '01abc'>0;
+-----------+
| '01abc'>0 |
+-----------+
|         1 |
+-----------+
1 row in set, 1 warning (0.00 sec)

 

二、字符串与字符串比较

字符串比较大小是逐位从高位到低位逐个比较(按ascii码),所以字符串类型的数字18<2

mysql> select "18"<"2";
+----------+
| "18"<"2" |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

mysql> select 'abc123'>'010abc';
+-------------------+
| 'abc123'>'010abc' |
+-------------------+
|                 1 |
+-------------------+
1 row in set (0.00 sec)

mysql>  select '465543153571602432' <= '5';
+-----------------------------+
| '465543153571602432' <= '5' |
+-----------------------------+
|                           1 |
+-----------------------------+
1 row in set (0.00 sec)

参考:

https://www.cnblogs.com/micrari/p/6358652.html MySQL中字符串与数字比较的坑https://www.cnblogs.com/FKdelphi/p/4683114.html 教程-最全ASCII 码对照表

 

 

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值