1. 程式人生 > >Mysql 一個欄位定義成int型別,查詢時傳入String,會擷取字串

Mysql 一個欄位定義成int型別,查詢時傳入String,會擷取字串

表定義:

CREATE TABLE `ids` (
    id int(11) not null auto_increment,
    PRIMARY KEY (id)
);
表中存在一些IDs: 111, 112, 113, 114 等.


查詢:

SELECT * FROM `ids` WHERE id = '112abcdefg'

Msql會將sql處理成:
SELECT * FROM `ids` WHERE id = '112'
個人理解 Mysql會將從左到右的第一個非數值開始,將後面的字串轉成0,在和數值型別相加。(112 + 0【abcdefg】)

解決方案:

1、程式碼層面:直接在java程式碼中限制不能傳入字串,如果是字串直接返回null。

2、資料庫層面:將id轉成字元型別。

2.1:

WHERE CAST(id AS CHAR(12)) = '112abcdefg'
2.2:
SELECT * FROM `ids` WHERE concat(id) = '112abcdefg';