sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg søge efter emoji i MySQL ved hjælp af utf8mb4?

Du bruger utf8mb4_unicode_ci for dine kolonner, så afkrydsningsfeltet er ufølsomt for store og små bogstaver. Hvis du bruger utf8mb4_bin i stedet er emojin 🌮 og 🌶 korrekt identificeret som forskellige bogstaver.

Med WEIGHT_STRING du kan få de værdier, der bruges til sortering og sammenligning for inputstrengen.

Hvis du skriver:

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

Så kan du se, at begge er 0xfffd . I Unicode-tegnsæt de siger:

Hvis du skriver:

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

Du får deres unicode-værdier 0x01f32e og 0x01f336 i stedet.

For andre bogstaver som Ä , Á og A der er ens, hvis du bruger utf8mb4_unicode_ci , kan forskellen ses i:

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

Disse kort til vægten 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

Ifølge:Forskel mellem utf8mb4_unicode_ci og utf8mb4_unicode_520_ci-kollationer i MariaDB/MySQL? vægtene brugt til utf8mb4_unicode_ci er baseret på UCA 4.0.0 fordi emoji'en ikke vises derinde, er den tilknyttede vægt 0xfffd

Hvis du har brug for ufølsomme sammenligninger og sorteringer for almindelige bogstaver sammen med emoji, er dette problem løst ved hjælp af utf8mb4_unicode_520_ci :

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

der vil også få forskellige vægte for disse emoji 0xfbc3f32e og 0xfbc3f336 .



  1. Sådan får du adgang til online mysql-database i Android?

  2. Er det sikkert at sammenligne strenge med 'større end' og 'mindre end' i MySQL?

  3. Mysql ERROR 1241 (21000):Operand skal indeholde 1 kolonne(r)

  4. SSIS Kildeformat Implicit Konvertering til Datetime