2016-06-30 7 views
2

ich eine Tabelle mit varchar Wert haben, der Textwerte mit Emojis speichern muss:Befund Werte Fall unsensibel mit Emojis

CREATE TABLE `my_table` (
    `id` bigint(11) NOT NULL AUTO_INCREMENT, 
    `value` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `value_idx` (`value`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 

Jetzt muss ich wählt auf dieser Tabelle tun, um alle Werte zu finden mit dem Präfix beginnen. Bei Auswahlen muss die Groß-/Kleinschreibung beachtet werden und auch Emoji müssen übereinstimmen. Bisher fand ich 4 Optionen, die alle Abwägungen haben:

  1. I utf8mb4_unicode_ci Sortierung verwenden können und tun wählt wie

    select * from my_table where value like 'prefix%'

    Es werden alle Werte Wind beginnend mit dem Präfix seine Zeichen Fall ignorieren, aber wird nichts finden, wenn Präfix Emojis enthält

  2. ich Sammlung einstellen meine wählt werden Werte finden, wenn Präfix Emojis enthält, utf8mb4_bin und wird aber Groß- und Kleinschreibung

  3. sein
  4. kann ich

    select * from my_table where LOWER(value) like 'prefix%'

    tun und es wird Fall unsensibel und mit Emojis funktionieren, aber nicht Index

  5. verwenden Und schließlich kann ich alle Werte in Kleinbuchstaben speichern und utf8mb4_bin Sortierung verwenden, aber Speichern in klein~~POS=TRUNC ist auch der Trade-off

gibt es eine Lösung, die mich „wie“ wählt ignorieren Fall des Präfix zu tun erlauben würde, und ermöglicht Emojis in Präfix zu haben?

UPD: Ich habe keine Probleme mit der Speicherung von Emojis, ich habe Probleme mit ihnen mit „gefällt mir“ zu finden, wählen Sie Groß- und Kleinschreibung Sortierungs halten

+0

Mögliche Duplikate von [Speichern von Android Emoji in MySQL] (http://StackOverflow.com/Questions/468474739/storing-android-emoji-in-Mysql) –

+1

absolut nicht, diese Frage ist über Probleme beim Speichern von Emojis. Ich habe solche Probleme nicht, weil ich utf8mb4 verwende, das 4 Bytes Unicode-Zeichen speichern kann –

Antwort

1

Lösung wird MySQL verwenden 5.6+ und Sortierung zu verwenden utf8mb4_unicode_520_ci, die nicht der Fall ist Behandle alle 4 Bytes Zeichen als gleich