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 碼對照表

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章