MySQL會自動將字符串轉換爲\將數值轉換爲數值嗎?
該轉換是如何工作的?MySQL自動將一個字符串轉換/轉換爲一個數字?
- '1234'= 1234?
- '1abc'= 1?
- 'text'= 1?
鑑於units.id
是bigint類型,該查詢將如何解釋?
SELECT table.*
FROM table
WHERE id='text'
MySQL會自動將字符串轉換爲\將數值轉換爲數值嗎?
該轉換是如何工作的?MySQL自動將一個字符串轉換/轉換爲一個數字?
鑑於units.id
是bigint類型,該查詢將如何解釋?
SELECT table.*
FROM table
WHERE id='text'
您對前三個問題的回答是:是,是,否。
當字符串'text'
轉換爲數字時,它將成爲值0
。
描述類型轉換的文檔是here。
您所查詢:
SELECT table.*
FROM table
WHERE id='text';
規則是由文檔的摘錄捕獲:
在其他情況下,參數相比,浮點(實)數。
換句話說,這實際上等效於:
WHERE id = 0.0
像任何DBMS一樣,它執行隱式轉換。
對於其他類型,根據MySQL文檔,則必須使用convert /施放功能 http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html
這裏是從SO一個例子: Convert text into number in MySQL query
謝謝@elfentech – yossi
Postgres在做SELECT時並不做隱式轉換,甚至當它做'1abc'!= 1時,所以在考慮OP –
MySQL的默認治療1和「1 '但是您可以通過將MySQL行爲設置爲嚴格模式來改變這一點。
set @@GLOBAL.sql_mode = "STRICT_ALL_TABLES";
set @@SESSION.sql_mode = "STRICT_ALL_TABLES";
,或者你可以設置你的my.cnf文件這些變量是永久性的sql_mode = ''
。這樣,如果使用了錯誤的類型,MySQL將會拋出一個錯誤。 閱讀http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html瞭解更多詳情
謝謝@ sam-d時,「any」太寬。 – yossi
[是](http://stackoverflow.com/questions/14411380/what-is-the-meaning-of-select/ 14411466#14411466) –