sql >> Database >  >> RDS >> Mysql

Hoe kan ik zoeken op emoji in MySQL met utf8mb4?

Je gebruikt utf8mb4_unicode_ci voor uw kolommen, dus de controle is niet hoofdlettergevoelig. Als u utf8mb4_bin . gebruikt in plaats daarvan worden de emoji 🌮 en 🌶 correct geïdentificeerd als verschillende letters.

Met WEIGHT_STRING u kunt de waarden ophalen die worden gebruikt voor het sorteren en vergelijken van de invoerreeks.

Als je schrijft:

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

Dan kun je zien dat beide 0xfffd . zijn . In Unicode-tekensets ze zeggen:

Als je schrijft:

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

U krijgt hun unicode-waarden 0x01f32e en 0x01f336 in plaats daarvan.

Voor andere letters zoals Ä , Á en A die gelijk zijn als je utf8mb4_unicode_ci . gebruikt , het verschil is te zien in:

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

Die komen overeen met het gewicht 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

Volgens:Verschil tussen utf8mb4_unicode_ci en utf8mb4_unicode_520_ci collaties in MariaDB/MySQL? de gewichten die worden gebruikt voor utf8mb4_unicode_ci zijn gebaseerd op UCA 4.0.0 omdat de emoji daar niet voorkomt, is het toegewezen gewicht 0xfffd

Als je hoofdletterongevoelige vergelijkingen en sorteringen nodig hebt voor gewone letters samen met emoji, dan is dit probleem opgelost met utf8mb4_unicode_520_ci :

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

er zullen ook verschillende gewichten zijn voor die emoji 0xfbc3f32e en 0xfbc3f336 .



  1. Hoe voer ik een ingevoegde identiteit in en retourneer ik met Dapper?

  2. Geen geldige maand op een INSERT-statement

  3. SQL INSERT INTO-instructie

  4. dubbele vermeldingen in de database voorkomen