SQLite 3: Проблема символов при упорядочении по записям - PullRequest
4 голосов
/ 19 октября 2011

В моей базе данных SQLite 3 есть несколько записей с турецкими символами, такими как «Ö», «Ü», «İ» и т. Д. Когда я выбираю свои значения с помощью запроса SELECT * FROM TABLE ORDER BY COLUMN_NAME, записи, начинающиеся с этих символов,подходит к концу.

Как правило, они должны были идти после буквы, которая является точечной версией каждого из них.Как «Ö» после «O», «Ü» после «U».

Это что-то про региональные настройки?Есть ли способ контролировать эти настройки?

Я использую SQLite Manager в Firefox для управления моей БД.

Заранее спасибо.

PS Я знаю, что это не решение для SQLite, но для тех, кому нужно использовать SQLite DB в Objective-C, они могут отсортировать массив данных после получения из SQLite DB.Вот хорошее решение: Как отсортировать NSMutableArray с пользовательскими объектами в нем?

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

К сожалению, кажется, нет прямого решения для этого. Для iOS как минимум. Но есть способы следовать.

После того, как я подписался на список рассылки SQLite, пользователь по имени Жан-Кристоф Дешам пришел с таким ответом:

"В моей базе данных SQLite 3 есть несколько записей с турецкими символами такие как «Ö», «Ü», «İ» и т. д. Когда я выбираю свои значения с помощью «SELECT * FROM» TABLE ORDER BY COLUMN_NAME ', записи, начинающиеся с этих символы идут в конце. "

Голая кость SQLite корректно сопоставляется только в нижней кодировке ASCII. Хотя это хорошо для простого английского языка, для большинства из нас это не работает.

"Как правило, они должны были прийти после того, как письмо без точки версия каждого. Как «Ö» после «O», «Ü» после «U». Это что-то про региональные настройки? Есть ли способ контролировать эти Настройки? "

У вас есть выбор между некоторыми способами сделать это правильно или близко к праву для вашего языка (языков):

o) использовать ICU как расширение (для сторонних менеджеров) или связано с ваше приложение. Преимущества: он работает на 100% правильно для данного языка одновременно в каждом операция. Недостатки: он огромный и медленный и требует регистрации сопоставления для каждый язык, с которым вы имеете дело. Также это не будет хорошо работать для столбцов содержит несколько неанглийских языков.

o) написать свои собственные параметры сортировки, используя процедуры ICU вашей ОС для сличать строки. Преимущества: не раздутый код с огромными библиотеками. Недостатки: требует, чтобы вы написали это расширение (в C или что-то), то же самое другие недостатки, такие как ICU.

o) Если вы используете Windows, загрузите и используйте функции в расширение я написал для близкого к правильному результату. Преимущества: он небольшой, довольно быстрый и готов к использованию, он независимый, но работает прилично хорошо для многих языков в в то же время; он также предлагает ряд Unicode-осведомленных функции манипуляции со строками (без акцента или без), функция нечеткого поиска и многое другое. Поставляется как источник C и DLL x86, бесплатная для любых целей. Недостаток: вероятно, он не работает на 100% правильно для любого языка, использующего больше, чем "ванильные английские буквы": ваши без точек я сопоставлю например, по пунктирной линии. Это хороший компромисс между абсолютная корректность для ОДНОГО языка и «справедливая» корректность для большинство языков (включая некоторые азиатские языки, использующие диакритические знаки) Загрузить: http://dl.dropbox.com/u/26433628/unifuzz.zip

«Я использую SQLite Manager в Firefox для управления своей БД.»

Мое небольшое расширение будет работать с этим. Вы также можете захотеть попробуйте SQLite Expert, который имеет встроенный ICU (по крайней мере, в его версии Pro) и много больше.

0 голосов
/ 19 октября 2011

Это могут быть региональные настройки, но сначала я бы убедился, что используется кодировка UTF-8.

...