Использование COLLATE в Android SQLite – локали игнорируются в инструкции LIKE

При создании моей базы данных SQLite в Android я устанавливаю локаль базы данных – db.setLocale (новый язык («cz_CZ»)). Это чешский язык.

Оператор SELECT работает и учитывает локаль, например:

SELECT * from table WHERE name='sctzy' COLLATE LOCALIZED 

Найдете запись «ščťžý».

Но использование LIKE не удастся:

 SELECT * from table WHERE name LIKE '%sctzy%' COLLATE LOCALIZED 

Никакая строка не возвращается.

КСТАТИ. В Android нет класса java.text.Normalized. Я думал, что могу сделать второй столбец с нормализованным текстом, лишенный специальных символов, который будет использоваться для поиска – но мне не хватает класса или способа нормализации строки.

Solutions Collecting From Web of "Использование COLLATE в Android SQLite – локали игнорируются в инструкции LIKE"

Вы посмотрели документацию SQLite для LIKE ? Появилась информация о несимвольных символах и ошибке. Возможно, у Android установлена ​​более старая версия SQLite, где это проблема.

К сожалению, второй нормализованный столбец может быть вашим лучшим вариантом.

Создание второго нормализованного столбца можно использовать для ограничения ограничений (как кратко сказано в других ответах).

Это на практике означает, что вам нужно создать другой (теневой) столбец вашего первого, где хранятся одни и те же данные в фиксированном случае (например, все верхние символы). Нечувствительные к регистру запросы (в том числе запросы) могут быть сделаны в этом новом столбце со значениями поиска в том же случае.

Если первый столбец «a» содержит

AAA
ааа
Bbb
aaÃ
EEE

Второй столбец a_shadow будет содержать те же строки

AAA
AAA
ВВВ
aaÃ
EEE

И ваш исходный запрос (пример) "выберите a из таблицы mytable, где a = 'äää'"
Будет заменен на «выберите a из таблицы, где A =« ÄÄÄ »»

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

UPDATE mytable SET a_shadow=UPPER(a);

Может потребоваться много времени, но вы можете использовать java.text.Normalizer, как здесь

Преобразование символов, акцентированных писем на английский алфавит

Поскольку это не часть подмножества java для Android, вы можете попытаться найти его в коде java, например здесь: http://www.docjar.com/html/api/java/text/Normalizer.java. Html С помощью Javadoc можно найти здесь: http://www.docjar.com/docs/api/java/text/Normalizer.html

И скопируйте часть кода, необходимую в вашем проекте.

Надеюсь, что это работает!