powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite like русских букв
25 сообщений из 32, страница 1 из 2
SQLite like русских букв
    #35139501
GoHo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не работает like на русских буквах
база UTF-8
поля varchar(50)
если вводить английские символы то все как положено,
если русские происходит странное, например
1 Россия
2 Румыния
3 Украина
4 Вьетнам
5 Афганистан

Усли пишем
select * from Country
where Name like 'Украина'

выведет Украину, Румынию и Вьетнам(количество символов совпадает)
Если поставить '%' то добавит Афганистан знаков больше.
Может я чего не так делаю, или это в принципе не возможно?
...
Рейтинг: 0 / 0
SQLite like русских букв
    #35142919
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoHoНе работает like на русских буквах
база UTF-8
поля varchar(50)
если вводить английские символы то все как положено,
если русские происходит странное, например
1 Россия
2 Румыния
3 Украина
4 Вьетнам
5 Афганистан

Усли пишем
select * from Country
where Name like 'Украина'

выведет Украину, Румынию и Вьетнам(количество символов совпадает)
Если поставить '%' то добавит Афганистан знаков больше.
Может я чего не так делаю, или это в принципе не возможно?

Все нормально должно работать. Проверял на твоем примере выдает --> Украина
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
SQLite like русских букв
    #36350673
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexbootch, в том то и дело что не работает. dll последней версии
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36350885
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у Вас база в кодировке UTF-8, то и искать "Украина" нужно так:

Код: plaintext
1.
2.
SELECT * FROM Country
WHERE Name LIKE 'Украина';
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36350905
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
А вы поддержку юникода включили?.. По умолчанию СУБД распознает только английский алфавит. Куча веток по соседству на эту тему, например, "Автоматическое подключение collation для русского языка в расширении ICU для SQLite".
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36350917
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MBG, У меня в Delphi в программе исполузуется эта http://www.sqlite.org/sqlitedll-3_6_20.zip. + класс для работы с БД. Где там collation и ICU влючать понятия не имею. Мля, всё написано, код, а как дошёл до поиска текста - беда. База в UTF8
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36350921
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexbootch,
Пример: записи в базе: 2 строки "Администрация города" "Администрация области". Запрос вида: горо. Вот так ищет улубуду, т.е. выводит обе записи:
Код: plaintext
tsql := sql.GetTable('select id from firm where name like "%' + Edit1.Text + '%"');
А так, вообще ничего:
Код: plaintext
tsql := sql.GetTable('select id from firm where name like "%' + AnsiToUtf8(Edit1.Text) + '%"');
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351046
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MT-TeamAlexbootch,
Пример: записи в базе: 2 строки "Администрация города" "Администрация области". Запрос вида: горо. Вот так ищет улубуду, т.е. выводит обе записи:
Код: plaintext
tsql := sql.GetTable('select id from firm where name like "%' + Edit1.Text + '%"');
А так, вообще ничего:
Код: plaintext
tsql := sql.GetTable('select id from firm where name like "%' + AnsiToUtf8(Edit1.Text) + '%"');


MT-Team , пиши строки "Администрация города" "Администрация области" в базу в кодировке UTF-8, а не ANSI, т.е. "Администрация РіРѕСЂРѕРґР°" и "Администрация области"
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351117
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexbootch, они там так и записаны (UTF8), если базу (файл) открыть в то-же Notepad++ то он как раз говорит что файл в кодировке UTF8.
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351157
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MT-Team, можете мне прислать ваши БД и врапер ? Посмотрю, потестю ...
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351192
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Arefiev, да без проблем. Говорите E-Mail
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351194
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darefiev собака da тире soft точка com
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351270
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В БД все лежит в ANSI-1251, а не в UTF8. Т.е. стандартный LIKE работать не будет,
как и прочие встроенные строковые функции, операторы и т.д.

Врапер ничего, никуда не конвертирует. Т.е. тебе необходимо самому конвертировать
строки в UTF8 перед сохранением и конвертировать в ANSI 1251 при чтении. При условии,
что Delphi не юникодный.

Примерно так ...
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351485
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Arefievчто Delphi не юникодный.
А как проверить?
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351533
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И ещё, подскажите менеджер для SQLite какой нить хороший.
Модератор: Это оффтопик. Предлагаю создать новую тему с означенным вопросом.
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351551
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MT-TeamDmitry Arefievчто Delphi не юникодный.
А как проверить?
D2007 и новее - юникодные. Но похоже присланные юниты не адаптированы к
юникодным Delphi. Так что, это не твой случай :)
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351640
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Arefiev, скачал новый врапер, то-же комманды. Там уже есть упоминания о UTF-8.
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36351958
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. А как задать чтоб база создавалась в UTF?
2. Поставил Delphi 2009. Там нужно кодить/енкодить строки при вставке/выбоки?
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36352911
Amver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В D2006+(вроде-бы) кодировка по-умолчанию - utf8

На счет SELECT - попробуйте следующий трюк, (у меня в аналогичном случае) работает превосходно :)
Код: plaintext
tsql := AnsiString(UTF8Decode(sql.GetTable('select id from firm where name like "%' + Edit1.Text + '%"'));

Здесь есть другой подводный камень, как написано в исходном коде SQLite:
Код: plaintext
1.
2.
3.
** SQLite only considers US-ASCII (or EBCDIC) characters.  We do not
** handle case conversions for the UTF character set since the tables
** involved are nearly as big or bigger than SQLite itself.
*/
что значит, что LIKE и ORDER BY для кириллических символов чувствителены к регистру :(

Гуглю уже 2й день, из более-менее полезного нашел только статью http://habrahabr.ru/blogs/sql/57915/ , где предлагается установить ICU. Не имею ни малейшего понятия как для stand-alone приложения, написанного на delphi, установить этот самый ICU, поэтому в той статье меня заинтересовал предпоследний комментарий (цитирую полностью):
naum22 апреля 2009, 20:31
Достаточно пропатчить массив sqlite3UpperToLower (надо бы его расширить) + исправить где-надо range, если мне память не изменяет.
Тема модификации сурса SQLite развития не получила, гугл-же ничего интересного тоже пока не не выдал. В Си я приблизительный ноль, поэтому,потыкавшись в исходник, так и не решил проблему.
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36352974
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Amverолее-менее полезного нашел только статью http://habrahabr.ru/blogs/sql/57915/ , где предлагается установить ICU. Не имею ни малейшего понятия как для stand-alone приложения, написанного на delphi, установить этот самый ICU, поэтому в той статье меня заинтересовал предпоследний комментарий (цитирую полностью):
naum22 апреля 2009, 20:31
Достаточно пропатчить массив sqlite3UpperToLower (надо бы его расширить) + исправить где-надо range, если мне память не изменяет.
Тема модификации сурса SQLite развития не получила, гугл-же ничего интересного тоже пока не не выдал. В Си я приблизительный ноль, поэтому,потыкавшись в исходник, так и не решил проблему.

В этом самом форуме я уже не раз на сборку SQLite+libICU под винду ссылку давал. На офсайте есть информация (разве что не написано, что в каком месте патчить при сборке), в рассылке эскулайт эта тема регулярно поднималась... Также я выкладывал ссылку на упрощенную реализацию, которую легко собрать и весит немного (именно расширенная таблица), в рассыле эскулайт немецкий разработчик недавно еще одну реализацию публиковал, в которой по моей просьбе предусмотрел работу с русским языком (я обещался протестировать, но пока не добрался, т.к. реализация под винду, а у меня линукс на всех доступных машинах). Далее, можно забиндить collation из приложения... Сколько вам еще нужно решений, если 4-х перечисленных мало?
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36353042
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MT-Team1. А как задать чтоб база создавалась в UTF?
Читай
MT-Team2. Поставил Delphi 2009. Там нужно кодить/енкодить строки при вставке/выбоки?
Да кто же ее эту либу, которую ты используешь, знает ...
Выбери нормальную либу. Вот список - http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36353218
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry ArefievВыбери нормальную либу. Вот список - http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers
Я как раз либу вот из этого списка и выбрал. Короч, всем спасибо, разобрался. При вставке в таблицу использую UTF8Encode а при выводе использую UTF8Decode. Всё работает замечательно, только вот и огорчает что поиск регистрозависимый.
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36353222
MT-Team
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmverНа счет SELECT - попробуйте следующий трюк, (у меня в аналогичном случае) работает превосходно :)
Я как раз вчера до этого допёр. То-же всё работает превосходно. Отписался выше.
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36354132
Amver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MBGВ этом самом форуме я уже не раз на сборку SQLite+libICU под винду ссылку давал.С SQLite я работаю через компоненты Aducom. Качал вашу сборку http://mobigroup.ru/files/sqlite3.6.2-win.tar.bz2 , ни в одной из dll в данном архиве нету ф-ции SQLite3Open16, которая требуется компоненту для работы.
Далее, натыкался я и на фикс sqlite сурсов в рассылке, вот только он датируется 2006 годом, посему применить его не является возможным: http://www.mail-archive.com/sqlite-users@sqlite.org/msg12261.html

Не кинетесь-ли линком на реализацию немецкого разработчика?

Поскольку пока-что мною проблема "решена" в лоб, путем дублирования данных в БД в низком регистре.
...
Рейтинг: 0 / 0
SQLite like русских букв
    #36355543
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
AmverMBGВ этом самом форуме я уже не раз на сборку SQLite+libICU под винду ссылку давал.С SQLite я работаю через компоненты Aducom. Качал вашу сборку http://mobigroup.ru/files/sqlite3.6.2-win.tar.bz2 , ни в одной из dll в данном архиве нету ф-ции SQLite3Open16, которая требуется компоненту для работы.

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

Amver
Не кинетесь-ли линком на реализацию немецкого разработчика?

Поскольку пока-что мною проблема "решена" в лоб, путем дублирования данных в БД в низком регистре.

Есть где-то в архивах рассылки, но искать не стал, выложил ту версию, что Jean-Christophe Deschamps мне присылал:
http://mobigroup.ru/files/sqlite-ext/unifuzz.zip

А вот кусок из письма:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Hi Alexey,

 
 I would like to have your opinion for an extension I've [re]written implementing Unicode casing, fuzzy compare 
and collation.  I've choosen to make it locale-independant, whatever that means, short of a detailed explanation 
see header of source for all details).

 I was aiming at a lightweight implementation, not the  18 +Mb of ICU, at the cost of cutting "some" corners.

 I couldn't come up with a lightweight and portable collation support, so this implementation relies on a _Windoze_ 
call.  Any XP or later will do.

...

Дальше он пишет, что надеется, я все-таки найду где-нибудь винду, чтобы потестить, и расскажу о результатах. Найду, конечно, вот только когда...
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SQLite like русских букв
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]