0
我只是跑這個查詢:Mysql治療varchar爲int錯誤?
UPDATE mytable SET mycol='text' WHERE mycol=0;
的點是該列mycol
是VARCHAR,但我處理是作爲INT爲好。 令我驚訝的是,where子句在表中的所有行上評估爲true,是否爲空。
那麼,爲什麼非空字符串比較等於整數零?
我只是跑這個查詢:Mysql治療varchar爲int錯誤?
UPDATE mytable SET mycol='text' WHERE mycol=0;
的點是該列mycol
是VARCHAR,但我處理是作爲INT爲好。 令我驚訝的是,where子句在表中的所有行上評估爲true,是否爲空。
那麼,爲什麼非空字符串比較等於整數零?
這在MySQL中有很好的記錄行爲。
當在調用數字的上下文中遇到字符串時,MySQL將該字符串轉換爲數字,從字符串開頭的數字開始。當沒有數字時停止。因此,沒有一串數字變爲0
如果你想有一個適當的比較,使用單引號:
UPDATE mytable SET mycol='text' WHERE mycol = '0';
Here是確切的報價:
要投一個字符串轉換爲在數字上下文中的數值,你通常 不需要做任何事情,除了使用字符串值作爲 ,儘管它是一個數字:
mysql > SELECT 1 +'1'; - > 2
這不是一個錯誤。 PHP也一樣。當將字符串與int進行比較時,它會嘗試將該字符串解析爲int,如果沒有成功,它會將其威脅爲0. –
不僅它不是一個錯誤,它有時也很方便。 –
謝謝大家,我不知道爲什麼,但我認爲int被鑄造成(空)字符串.. :) –