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

utf8mb4を使用してMySQLで絵文字で検索するにはどうすればよいですか?

    utf8mb4_unicode_ciを使用します 列の場合、チェックでは大文字と小文字が区別されません。 utf8mb4_binを使用する場合 代わりに、絵文字🌮と🌶は異なる文字として正しく識別されます。

    WEIGHT_STRINGを使用 入力文字列の並べ替えと比較に使用される値を取得できます。

    あなたが書く場合:

    SELECT
      WEIGHT_STRING ('🌮' COLLATE 'utf8mb4_unicode_ci'),
      WEIGHT_STRING ('🌶' COLLATE 'utf8mb4_unicode_ci')
    

    次に、両方が0xfffdであることがわかります。 。 Unicode文字セット 彼らは言う:

    あなたが書く場合:

    SELECT 
      WEIGHT_STRING('🌮' COLLATE 'utf8mb4_bin'),
      WEIGHT_STRING('🌶' COLLATE 'utf8mb4_bin')
    

    ユニコード値0x01f32eを取得します および0x01f336 代わりに。

    Äのような他の文字の場合 、Á およびA utf8mb4_unicode_ciを使用する場合は同じです 、違いは次のように確認できます:

    SELECT
      WEIGHT_STRING ('Ä' COLLATE 'utf8mb4_unicode_ci'),
      WEIGHT_STRING ('A' COLLATE 'utf8mb4_unicode_ci')
    

    それらは重み0x0E33にマップされます

    Ä: 00C4  ; [.0E33.0020.0008.0041][.0000.0047.0002.0308] # LATIN CAPITAL LETTER A WITH DIAERESIS; QQCM
    A: 0041  ; [.0E33.0020.0008.0041] # LATIN CAPITAL LETTER A
    

    によると: MariaDB / MySQLのutf8mb4_unicode_ciとutf8mb4_unicode_520_ciの照合の違いは? utf8mb4_unicode_ciに使用される重み UCA4.0.0 に基づいています 絵文字が表示されないため、マップされた重みは0xfffdです。

    大文字と小文字を区別しない比較と絵文字付きの通常の文字の並べ替えが必要な場合、この問題はutf8mb4_unicode_520_ciを使用して解決されます。 :

    SELECT
      WEIGHT_STRING('🌮' COLLATE 'utf8mb4_unicode_520_ci'),
      WEIGHT_STRING('🌶' COLLATE 'utf8mb4_unicode_520_ci')
    

    これらの絵文字0xfbc3f32eにも異なる重みが付けられます および0xfbc3f336



    1. 有効期限チェックの基本的な日付比較

    2. mysql:リモートIPを使用してローカルホストに接続しようとしたときに接続が拒否されました

    3. 月と年のみに基づいてmySQLを選択します

    4. MySQL selectでXPATHを使用する方法は?