2

単純な MySQL クエリで興味深い問題が発生しました。私はidフィールドで正確な試合をしようとしています。

SELECT id
FROM tablename
WHERE id = '23'

戻り値

id: 23

私がそうするまで、すべては順調です:

SELECT id
FROM repairs
WHERE id = '23abcd'

戻り値

id: 23

なぜこれを行うのでしょうか。 idフィールドはint(10)、データベースは MyISAM utf8_general_ci です。

何かご意見は?

4

3 に答える 3

3

データベースには int フィールドがあり、文字が切り捨てられ、数字のみが考慮されるため、23 が戻り ID として取得されます。

于 2013-07-06T15:44:45.623 に答える
0

Fakhruddin が言ったように、intフィールドは文字の値を切り捨てます。それは正しい。STRICT_ALL_TABLESただし、モードを設定することで、間違った値が最初に挿入されるのを防ぐことができます

mysql> SET sql_mode = 'STRICT_ALL_TABLES';

もう1つ、IDに文字が含まれている場合は、IDを文字列(VARCHAR)として保存する必要があります。

于 2013-07-06T16:04:06.230 に答える
0

クエリで数値を引用しているため、MySQL はそれを文字列から数値に変換する必要があります。その場合、文字列の数値部分のみを使用しています。

私はその動作が完全に適切だとは思いません ( "23abcd".ToInt() は NULL であるべきだと思います) が、それはそれが行うことです。

于 2013-07-06T16:00:42.993 に答える