簡體   English   中英

MySQL整數比較會忽略結尾的字母字符

[英]MySQL integer comparison ignores trailing alpha characters

因此,可以說我有一個ID僅是int的表。 我發現正在運行:

SELECT *
FROM table 
WHERE ID = '32anystring';

返回id = 32的行。顯然是32!='32anystring'。

這看起來很奇怪。 為什么這樣做? 可以關閉嗎? 什么是最好的解決方法?

在大多數編程語言中,將字符串轉換為數字時,通常會將前導數字解釋為數字。

有兩種方法可以解決此問題:

使用准備好的語句,並定義將值放入數字類型的位置的占位符。 這將完全防止將字符串放在此處。

在應用程序的更高層進行檢查以驗證輸入並確保其為數字。

在mysql中使用BINARY關鍵字(我只是猜測這是可行的,從未嘗試過,因為我總是在運行查詢之前實施了正確的驗證系統)-

SELECT *
FROM table 
WHERE BINARY ID = '32anystring';

你需要讀這個

http://dev.mysql.com/doc/refman/5.1/en/type-conversion.html

  1. 當您處理或比較兩種不同類型時,其中一種將轉換為另一種。
  2. MySQL轉換'1.23def' * 2 > number(可以執行'1.23def' * 2 => 2.46),只要它仍然是有效數字,就盡可能地解析該字符串。 如果首字母不能為數字的一部分,則結果為0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM