Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich in MySQL mit utf8mb4 nach Emoji suchen?

Sie verwenden utf8mb4_unicode_ci für Ihre Spalten, sodass bei der Prüfung die Groß- und Kleinschreibung nicht beachtet wird. Wenn Sie utf8mb4_bin verwenden Stattdessen werden die Emojis 🌮 und 🌶 korrekt als unterschiedliche Buchstaben identifiziert.

Mit WEIGHT_STRING Sie können die Werte abrufen, die zum Sortieren und Vergleichen für die Eingabezeichenfolge verwendet werden.

Wenn Sie schreiben:

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

Dann können Sie sehen, dass beide 0xfffd sind . In Unicode-Zeichensätzen sie sagen:

Wenn Sie schreiben:

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

Sie erhalten ihre Unicode-Werte 0x01f32e und 0x01f336 stattdessen.

Für andere Buchstaben wie Ä , Á und A die gleich sind, wenn Sie utf8mb4_unicode_ci verwenden , der Unterschied ist zu sehen in:

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

Diese werden dem Gewicht 0x0E33 zugeordnet

Ä: 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

Laut:Unterschied zwischen utf8mb4_unicode_ci und utf8mb4_unicode_520_ci Sortierungen in MariaDB/MySQL? die für utf8mb4_unicode_ci verwendeten Gewichtungen basieren auf UCA 4.0.0 Da die Emojis dort nicht erscheinen, ist die zugeordnete Gewichtung 0xfffd

Wenn Sie Vergleiche und Sortierungen ohne Berücksichtigung der Groß-/Kleinschreibung für normale Buchstaben zusammen mit Emoji benötigen, wird dieses Problem mit utf8mb4_unicode_520_ci gelöst :

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

es werden auch unterschiedliche Gewichte für diese Emojis 0xfbc3f32e angezeigt und 0xfbc3f336 .