mysql 隱式轉換問題(案例一)

2022-07-11 07:09:12 字數 1559 閱讀 9746

建表語句:

create table `user` (

`id` varchar(255) not null,

`username` varchar(255) character set latin1 default null,

primary key (`id`)

) engine=innodb default charset=utf8;

表中資料:

引入問題:

執行sql語句

select id from `user` where id = 204027026112927605

結果按照預期的話應該是只有id等於204027026112927605 的一條資料,實際輸出的結果為:

分析:這裡再where後面的條件查詢處發生了隱式轉換

逐行讀取user表的id列放入val1,而常量204027026112927603存在於cache中,型別為double型別(2.0402702611292762e+17),所以到這裡傳值給val2後val2=2.0402702611292762e+17。

當掃瞄到第一行時,204027026112927605轉成doule的值為2.0402702611292762e17,等式成立,判定為符合條件的行,繼續往下掃瞄,同理204027026112927603也同樣符合

解決方法:(型別保持一致,避免出現隱式轉換)

因為在定義表時id的型別為varchar型別,所以我們在條件處吧需要搜尋的條件也賦成字串型別,就可以避免隱式轉換。

正確的sql:(用單引號講id的值引起來)

select id from `user` where id = '204027026112927605'

查詢的結果:

避免發生隱式型別轉換,隱式轉換的型別主要有欄位型別不一致、in引數包含多個型別、字符集型別或校對規則不一致等

隱式型別轉換可能導致無法使用索引、查詢結果不準確等,因此在使用時必須仔細甄別

數字型別的建議在字段定義時就定義為int或者bigint,表關聯時關聯字段必須保持型別、字符集、校對規則都一致

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...