Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę wyszukiwać za pomocą emoji w MySQL za pomocą utf8mb4?

Używasz utf8mb4_unicode_ci dla Twoich kolumn, więc sprawdzanie nie uwzględnia wielkości liter. Jeśli używasz utf8mb4_bin zamiast tego emoji 🌮 i 🌶 są poprawnie identyfikowane jako różne litery.

Z WEIGHT_STRING możesz uzyskać wartości używane do sortowania i porównywania ciągu wejściowego.

Jeśli piszesz:

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

Wtedy możesz zobaczyć, że oba są 0xfffd . W zestawach znaków Unicode mówią:

Jeśli piszesz:

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

Otrzymasz ich wartości unicode 0x01f32e i 0x01f336 zamiast tego.

W przypadku innych liter, takich jak Ä , Á i A które są równe, jeśli używasz utf8mb4_unicode_ci , różnicę widać w:

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

Te mapowane do wagi 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

Według:Różnica między zestawieniami utf8mb4_unicode_ci i utf8mb4_unicode_520_ci w MariaDB/MySQL? wagi używane dla utf8mb4_unicode_ci są oparte na UCA 4.0.0 ponieważ emotikony nie pojawiają się tam, zmapowana waga to 0xfffd

Jeśli potrzebujesz porównywania i sortowania zwykłych liter wraz z emotikonami bez uwzględniania wielkości liter, ten problem można rozwiązać za pomocą utf8mb4_unicode_520_ci :

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

pojawią się również różne wagi dla tych emotikonów 0xfbc3f32e i 0xfbc3f336 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwersja MySQL do MS Access

  2. oblicz sumę czasu na wpisywanie za pomocą sql

  3. order by rand() ma problemy z dużymi postami

  4. UPDATE, jeśli istnieje jeszcze INSERT w SQL

  5. Grupować według dnia i nadal wyświetlać dni bez wierszy?