2017-05-12 16 views
1

undefined, A,B,Cを表す0, 1, 2, 3として格納された列criticality_idを持つテーブルがあります。私の同僚の一人は、重要度Cのすべての項目を表示したいと思いますが、彼はaccidentially間違ったクエリを使用してデータベースを照会します。MySQLで間違ったデータ型のクエリを避ける方法

select * from mytable where criticality_id = 'C' 

これは驚くほど少数のグーグル後criticality_id 0

を持つすべてのアイテムを取得し私はMySQLが自動的に型変換を行うことを知っていますので、ここに'C' = 0。クエリの結果は技術的には正しいものの、確かに彼が望むものではありません。私の質問は、このような種類の不一致を避け、厳密に一致した結果を返す方法です。一致しない場合は何も返しません。

+1

私はあなたのスキーマを文書化して、人々がどの列に住んでいるかを知っていると言う – RiggsFolly

答えて

0

データ型を自動的に設定する言語を使用していない限り、テーブルのスキーマがどのように見えるかを文書化する必要があります。タイプが不明なランダムなデータを取り込むことは賢明ではありません。

ごくわずかな例外を除いて、あなたが作業している「謎のデータ」であるべきではありません。

1

シンプルだがやや折衷的な解決策の1つは、データタイプをCHAR(1)に変更することです。その後

criticality_id = '0' --> true when criticality is 0 
criticality_id = 0  --> true when criticality is 0 
criticality_id = 'C' --> false when criticality is 0 

暗黙的な変換を除去するための設定がある場合、私は知りません。

関連する問題