私はいくつかのクエリのデバッグを行っていましたが、varchar フィールドをリテラルと比較するときに、予期しない (明らかに正しい) TRUE を取得していることに気付きました。具体的には次のとおりです。
- 問題の行は、自動インクリメント int 主キーと varchar(255) です
- 単一の行を追加するように設定するには:
insert into comp_test(test_string) values('TestString');
where test_string='tESTsTRING'
句は真ですwhere test_string='TestString '
句が真です (最後に空白が埋め込まれます)
そのため、質問を作成しているときに、原因と大文字と小文字の区別を強制する方法を説明する同様の投稿を見つけることができます (BINARY と COLLATE などを使用)。BINARY および COLLATE ソリューションでも、空白のパディングによって句が false になりますか?
私は今、解決策の一部を持っていますが、等価比較がなぜそれほどずさんなのか、誰か説明できますか? 上記の例で、test_string の値が 8 文字の文字列の場合、比較が true と評価される最大 64,000 個のリテラルがあります。それはどのような同等性ですか?それは間違っているように思われ、他のほとんどすべての言語では、1 対 1 の同等性以外は許可されません。
前もって感謝します。