SQLite обрабатывает неанглийские локали из коробки? - PullRequest
1 голос
/ 19 апреля 2010

Я заметил, что Google Toolbox для Mac заменяет несколько встроенных функций SQLite (LOWER / UPPER, LIKE, GLOB) на свои собственные версии, которые лучше обрабатывают языковые стандарты.

Итак, вопрос всем, кто имеет опыт работы с SQLite: были ли у вас когда-нибудь проблемы с неанглийскими языками в SQLite? Нужно ли что-то делать, чтобы правильно обрабатывать неанглийские алфавиты? Какие проблемы ожидаются, если я использую API-интерфейсы SQLite как есть?

(Я собираюсь использовать SQLite на iPhone, но я думаю, что он одинаков для всех платформ. Я уже использовал Core Data и никогда не испытывал проблем, но на этот раз я хочу перейти на не-ORMed доступ к базе данных.)

1 Ответ

1 голос
/ 19 апреля 2010

Кажется, что SQLite вообще не заботится о локали. Единственное место, где я нашел упоминание о локалях, - это вычисление datetime('now'). Но документация говорит, что его поведение зависит от базовых функций Си. Он сохраняет текстовые данные в Unicode по умолчанию (в версиях выше 3.0), но преобразование в Unicode является обязанностью клиентских библиотек.

Кстати, консоль SQLite под MS Windows - это одно из тех редких консольных приложений, которое все еще работает, как и ожидалось, когда вы переключаете кодовую страницу консоли на utf-8.

UPD

Некоторые цитаты из документации SQLite:

один

Когда SQLite сравнивает две строки, он использует последовательность упорядочения или функцию упорядочения (два слова для одной и той же вещи), чтобы определить, какая строка больше или две строки равны. SQLite имеет три встроенные функции сортировки: BINARY, NOCASE и RTRIM.

  • BINARY - сравнивает строковые данные, используя memcmp (), независимо от кодировки текста.
  • NOCASE - То же, что и двоичный, за исключением того, что 26 символов ASCII в верхнем регистре сложены в эквиваленты в нижнем регистре до того, как будет выполнено сравнение. Обратите внимание, что только символы ASCII складываются в регистр. SQLite не пытается выполнить полное UTF-сворачивание регистра из-за требуемого размера таблиц.
  • RTRIM - То же, что и двоичный, за исключением того, что символы в конце пробела игнорируются.

Приложение может зарегистрировать дополнительные функции сортировки, используя интерфейс sqlite3_create_collation ().

два

нижний (X) Функция нижнего (X) возвращает копию строки X со всеми символами ASCII, преобразованными в нижний регистр. Встроенная функция lower () по умолчанию работает только для символов ASCII. Для преобразования регистра символов, не входящих в ASCII, загрузите расширение ICU.

upper (X) Функция upper (X) возвращает копию входной строки X, в которой все символы ASCII в нижнем регистре преобразуются в их эквивалент в верхнем регистре.

три

SQLITE_ENABLE_ICU Эта опция [компиляции] приводит к добавлению в сборку расширения International Components для Unicode или "ICU" для SQLite.


Похоже, в любом случае вам нужно будет самостоятельно скомпилировать sqlite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...