sql >> データベース >  >> RDS >> Mysql

inSTR(str、substr)は、strに「é」または「ë」が含まれ、substrのみが「e」の場合は機能しません。

    これは、LOCATE()bug70767が原因です。 およびINSTR() 、検証済みです。

    INSTR()> ドキュメントには、マルチバイト文字列に使用できると記載されていますが、ご存知のように、utf8_general_ciのような照合では機能しないようです。 、大文字と小文字およびアクセントに依存しない>

    バグレポートによると、MySQLはこれを正しく実行しますが、バイトの数の場合にのみ実行します。 も同じです:

    レポートの例を変えるには、次のテーブルを作成します。

    create table t ( needle varchar(10), haystack varchar(10)
                      ) COLLATE=utf8_general_ci;
    insert into t values ("A", "a"), ("A", "XaX");
    insert into t values ("A", "á"), ("A", "XáX");
    insert into t values ("Á", "a"), ("Á", "XaX");
    insert into t values ("Å", "á"), ("Å", "XáX");
    

    次に、このクエリを実行すると、同じ動作が示されていることがわかります。

    select needle
         , haystack
         , needle=haystack as `=`
         , haystack LIKE CONCAT('%',needle,'%') as `like`
         , instr(needle, haystack) as `instr`
      from t;
    

    SQLフィドル




    1. PHPからmysqlデータベースにExcelファイルをインポートする方法

    2. SQLクエリを高速化する方法

    3. Python2.7とMySQLdbを使用してMySQLのblob列にバイナリデータを挿入するときにエンコードの警告を回避する方法

    4. mysqlでのorderby句のしくみ、順序付けは奇妙な動作を示します