2016-09-20 35 views
1

從右邊的字符去除字符我今天注意到一些奇怪的事情。假設你有一個MySQL表:MySql奇怪的行爲 - 從條款

create table usr(
    usr_id serial 
) 

你插入一行:

INSERT INTO usr (usr_id) VALUES ('1'); 

然後運行一個查詢:

SELECT * FROM usr WHERE usr_id='1sfgfsdgs' 

MySQL的返回結果,如果你已經進入:

SELECT * FROM usr WHERE usr_id='1' 

應該這發生?如果是的話 - 是否有人能指出我描述的這個文檔?我只是好奇這是否是預期的行爲。

[傑里米@ jjxps15〜] $ MySQL的--version MySQL的版本15.1 DISTRIB 10.1.17-MariaDB的,對於使用的readline的Linux(x86_64的)5.1

+0

1sfgfsdgs的整數是1,也許這就是原因。 usr_id fleld是否定義爲整數? – Lexib0y

回答

0

嗯,這是一個具有污垢的頁面,http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

但很顯然泥

當操作者使用不同類型的操作數,類型,則會出現 轉換,使操作數兼容。有些轉換 隱式發生。例如,MySQL根據需要自動將數字轉換爲 ,反之亦然。

它確實有幾個例子,使事情更清楚一點

mysql> SELECT 1 > '6x'; 
     -> 0 
mysql> SELECT 7 > '6x'; 
     -> 1 
mysql> SELECT 0 > 'x6'; 
     -> 0 
mysql> SELECT 0 = 'x6'; 
     -> 1 

這本質上意味着如果一個號碼相比,字母數字字符串,該字符串與一些所有非啓動丟棄數字字符到最後。

你使用serial的事實並沒有什麼關係。