MySQL NO_BACKSLASH_ESCAPES モードでのリテラルパーセント記号のエスケープ
MySQL では、NO_BACKSLASH_ESCAPES モードが有効になっている場合、標準のバックスラッシュ () 文字エスケープは無効。これにより、LIKE クエリでリテラルのパーセント (%) またはアンダースコア (_) 文字をエスケープしようとするときに問題が発生する可能性があります。
% を使用してパーセント記号をエスケープする従来の方法は、NO_BACKSLASH_ESCAPES モードでは無効になります。提供されたクエリに示されているように:
SELECT * FROM mytable WHERE mycol LIKE '5\% off'
...NO_BACKSLASH_ESCAPES モードが有効な場合、このクエリは望ましい結果を返すことができません。
エスケープ文字を使用した解決策
NO_BACKSLASH_ESCAPES モードでリテラルのパーセント記号をエスケープするには、次のようにする必要があります。エスケープ文字。エスケープ文字は、次の文字が特殊文字としてではなく文字通りに解釈されることを指定します。
MySQL では、エスケープ文字には英数字以外の任意の文字を使用できます。たとえば、バックスラッシュ () 文字をエスケープ文字として使用してみましょう。
select * from mytable where mycol like '5\% off' escape '\';
このクエリでは、パーセント記号の前にあるバックスラッシュは、パーセント記号がワイルドカードではなくリテラル文字として扱われることを示しています。 .
異なるエスケープ文字を使用した代替ソリューション
互換性を確保するためNO_BACKSLASH_ESCAPES モードと標準モードの両方で、エスケープ文字として別の文字を使用できます。これにより、モード設定に関係なくクエリが機能するようになります。
たとえば、エスケープ文字としてパイプ (|) 文字を使用してみましょう:
select * from mytable where mycol like '5|% off' escape '|';
この場合、パイプ文字はパーセント記号の前の はエスケープ文字として機能し、クエリを標準モードと NO_BACKSLASH_ESCAPES モードの両方で正常に実行できるようにします。
以上がMySQL の NO_BACKSLASH_ESCAPES モードでリテラルのパーセント記号をエスケープするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。