Mysql隱式轉換一些理解 附贈一些比較

2021-10-08 16:56:14 字數 1220 閱讀 4142

以下規則描述比較操作的轉換方式:

如果乙個或兩個引數都為空,則比較結果為空,但空安全<=>相等比較運算子除外。對於空值<=>空值,結果為真。不需要轉換。

如果比較操作中的兩個引數都是字串,則將它們作為字串進行比較。

如果兩個引數都是整數,則將它們作為整數進行比較。

如果不與數字進行比較,十六進製制值將被視為二進位制字串。

如果其中乙個引數是timestamp或datetime列,而另乙個引數是常量,則在執行比較之前,該常量將轉換為timestamp。這樣做是為了更好地支援odbc。注意,這不是為in()中的引數所做的!為了安全起見,在進行比較時始終使用完整的日期時間、日期或時間字串。例如,要在與日期或時間值之間使用時獲得最佳結果,請使用cast()將值顯式轉換為所需的資料型別。

如果其中乙個引數是十進位制值,則比較取決於另乙個引數。如果另乙個引數是十進位制或整數值,則將這些引數作為十進位制值進行比較;如果另乙個引數是浮點值,則將這些引數作為浮點值進行比較。

在所有其他情況下,引數都是作為浮點數(實數)進行比較的。

---度娘
eg:

select * from test where user=0

這種情況屬於 其他情況 所以作為浮點數進行比較 把字串和0都轉為浮點數,字串會轉換失敗(並不是所有字串都會轉成0 eg:1huahua轉換浮點數為1.00),變成0,結果就成了0=0 就會列出所有資料

tips:mysql 字串和數字比較時 如果字串前邊有數字 會把後面的字串丟掉進行比較,如果沒有數字 直接用0進行比較

select

if(1=1,true,false)boolean1,

if('a',true,false)boolean2,

if('a' and 1=1,true,false)boolean3

from dual

boolean1 :1

boolean2 :0

boolean3 :0

select

if(1=1,true,false)boolean1,

if('1a',true,false)boolean2,

if('1a' and 1=1,true,false)boolean3

from dual

boolean1 :1

boolean2 :1

boolean3 :1

mysql 隱式轉換 mysql中的隱式轉換

在mysql查詢中,當查詢條件左右兩側型別不匹配的時候會發生隱式轉換,可能導致查詢無法使用索引。下面分析兩種隱式轉換的情況 看表結構 phone為 int型別,name為 varchar 兩種情況都可以用到索引,這次等號右側是 2 注意帶單引號喲,左側的索引欄位是int型別,因此也會發生隱式轉換,但...

mysql隱式轉換

定義 當操作符與不同型別的運算元一起使用時,會發生型別轉換以使運算元相容。則會發生轉換隱式 舉乙個常見例子 1 我們先建立乙個表,有關手機號查詢 create table user id int 11 not null primary keyauto increment phone varchar ...

mysql隱式轉換

create table testsql id int 11 name varchar 11 descid varchar 11 alter table testsql add index descid alter table testsql add unique id insert into te...