2016-06-30 4 views
2

У меня есть таблица со значением VARCHAR, который необходимо хранить текстовые значения с смайликами:нахождения значений случая нечувствительно с 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 

Теперь мне нужно сделать выбираешь на этой таблице, чтобы найти все значения, начинающиеся с префиксом. Выборы должны быть чувствительны к регистру и должны соответствовать эмози. До сих пор я нашел 4 варианта, которые все имеют компромиссы:

  1. я могу использовать utf8mb4_unicode_ci сверку и делать выбирает как

    select * from my_table where value like 'prefix%'

    Это ветер все значения, начинающиеся с префикса игнорируя регистр символов, но ничего не найду, если префикс содержит смайлики

  2. Я могу установить коллекцию utf8mb4_bin и мои выбираешь найти значение, если префикс содержит смайлики, но буду чувствительны к регистру

  3. я могу сделать

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

    и он будет работать независимо от регистра и с смайликов, но не будет использовать индексировать

  4. И, наконец, я могу сохранить все значения в нижнем регистре и использовать utf8mb4_bin сверку, но экономия в нижнем регистре также компромисс

есть ли решение, которое позволило бы мне делать «как» выбирает, игнорируя регистр префикса и позволяют иметь смайлики в приставке?

UPD: У меня нет проблем с хранением смайликов, у меня есть проблемы с поиском их «как» выберите сохранение нечувствительны к регистру параметры сортировки

+0

Возможный дубликат [Хранение Android Emoji в MySQL] (http://stackoverflow.com/questions/24684739/storing-android-emoji-in-mysql) –

+1

абсолютно нет, этот вопрос о проблемах с хранением emojis. У меня таких проблем нет, потому что я использую utf8mb4, способный хранить 4 байта символов Unicode –

ответ

1

решение заключается в использовании MySQL 5.6+ и использовать utf8mb4_unicode_520_ci сортировки, который не делает обрабатывать все 4 байта в качестве равных

Смежные вопросы