sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag söka efter emoji i MySQL med utf8mb4?

Du använder utf8mb4_unicode_ci för dina kolumner, så kontrollen är skiftlägesokänslig. Om du använder utf8mb4_bin istället identifieras emojin 🌮 och 🌶 korrekt som olika bokstäver.

Med WEIGHT_STRING du kan få de värden som används för sortering och jämförelse för inmatningssträngen.

Om du skriver:

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

Då kan du se att båda är 0xfffd . I Unicode-teckenuppsättningar de säger:

Om du skriver:

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

Du kommer att få deras unicode-värden 0x01f32e och 0x01f336 istället.

För andra bokstäver som Ä , Á och A som är lika om du använder utf8mb4_unicode_ci , skillnaden kan ses i:

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

Dessa mappar till vikten 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

Enligt:​​Skillnaden mellan utf8mb4_unicode_ci och utf8mb4_unicode_520_ci-kollationer i MariaDB/MySQL? vikterna som används för utf8mb4_unicode_ci är baserade på UCA 4.0.0 eftersom emojin inte visas där är den mappade vikten 0xfffd

Om du behöver skiftlägesokänsliga jämförelser och sorteringar för vanliga bokstäver tillsammans med emoji så löses det här problemet med utf8mb4_unicode_520_ci :

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

det kommer också att få olika vikter för dessa emoji 0xfbc3f32e och 0xfbc3f336 .



  1. Hur du verifierar dina MySQL-säkerhetskopier med ClusterControl

  2. Tabell skapas inte sqlite android

  3. Hur visar man radnummer i PostgreSQL-fråga?

  4. Installera SQL Server Failover Cluster Instance – Del 1