1

フィールドと値の 2 つの指定されたパラメーターから SQL クエリを生成するスクリプトがあります。最終的に、次のようなものが生成されます。

SELECT * FROM table WHERE <field> IN <value>;

これまでのところ、深刻なことは何もありません。しかし、ここで想像してみてください。文字列を含むフィールドがあり、数字のみで構成される場合もあれば、そうでない場合もあります。そして今、あなたは123の値を与えます:

SELECT string FROM table WHERE string = 123;

MySQL Autocasting により、このクエリは 123 が含まれる行、または 123 で始まる文字列になります。この種の部分文字列の自動キャストを無効にする方法はありますか? 指定された値 (キャストかどうか)を正確に含む結果のみを取得したい

単純なテスト SQL この小さな選択は問題を示しています。

SELECT '123abc' IN (123, 234, 'xyz');

注: 私の SQL はスクリプトで生成されているため、単純に値を文字列にキャストしたり、大文字で囲んだりすることはできません。理想的な解決策は、型に関係なく、演算子を操作してequalsを返すことだけです。

4

1 に答える 1

0

引数を文字列として使用する場合は、引数を引用してください。それがどのように機能するかを確認してください:

SELECT '123abc' = '123'

autogenerator を使用してクエリを作成するときに値を自動的に引用する場合は、例のように、見かけの値の型を決定するのではなく、列の型に応じてデータベーススキーマ定義と引用/キャスト値をサポートするものを選択してください。

于 2013-11-04T12:39:44.367 に答える