|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
Есть БД SQLite 3, используемая кодировка 1251 ANSI Кирилица. Подключается из-под Delphi (версия библиотеки sqlite*.dll 3.4.2, допустим, используется через ASGSQLite, хотя это не важно). Как можно организовать регистронезависимый поиск (LIKE)? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2007, 02:34 |
|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
Примерно так : lower (Field_Name) like ' здесь все маленькими ' или upper (Field_Name) like ' ЗДЕСЬ ВСЕ БОЛЬШИМИ ' В SQLite функции преобразования в нижний и верхний регистры могут иметь другие наименования! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2007, 05:36 |
|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
Не смотря на то, что используется именно ANSI, а не UTF-8, функции UPPER и LOWER некорректно работают с русским текстом. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2007, 09:40 |
|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
Написал свою замену built-in UPPER'у. Выглядит следующим образом: Вот так вот внедрена новая функция в обертку. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Вот так вот мы ее потом используем для простейшей выборки: Код: plaintext 1. 2. 3. 4.
Результат выборки должен представлять собой строки с регистронезависимыми вложениями 'инф' в колонке Name. Но получаем полную неразбериху. Выдает чуть ли не всю таблицу. Ей богу не знаю как быть и что делать. Есть у кого мысли толковые? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2007, 13:55 |
|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
not_dev Как можно организовать регистронезависимый поиск (LIKE)? Самый простой способ - записывать данные в базу в своей кодировке (например, а- r&, А - R&) и будет у тебя возможность делать запросы без использования upper и lower , еще и для не особо продвинутых узеров будет возможность ограничить копирование данных напрямую из базы, т.к. что бы использовать данные из базы в своих программах нужно будет знать кодировку, используемую при записи данных в базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2007, 16:54 |
|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
БазановичСамый простой способ - записывать данные в базу в своей кодировке (например, а- r&, А - R&) и будет у тебя возможность делать запросы без использования upper и lower , еще и для не особо продвинутых узеров будет возможность ограничить копирование данных напрямую из базы, т.к. что бы использовать данные из базы в своих программах нужно будет знать кодировку, используемую при записи данных в базу. Вполне вариант, прорабатывал его. Есть единственный момент, что проблематично сделать грамотную кодировку в плане: скорости / компактности. Русский алфавит - 33 символа, сделать 1-в-1 замену на eng нереально, следовательно ряд букв (или сразу все) необходимо кодировать двумя байтами. Получаем прирост в размере БД порядка 80%. Остальные символы использовать нельзя, т.к. все они спокойно могут встречаться в базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2007, 16:28 |
|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
not_dev, что то ругается в функции sqlite3_create_function на @mUpper. datamodule.pas(235,88) Error: Incompatible type for arg no. 6: Got "<address of local procedure(Pointer, LongInt, PPChar);CDecl>", expected "<procedure variable type of procedure(Pointer, LongInt, PPsqlite3_value);CDecl>" можешь подсказать что нужно сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2009, 09:22 |
|
[SQLite] Регистронезависимый поиск
|
|||
---|---|---|---|
#18+
Что мешает включить в эскулайте поддержку юникода и не извращаться? Есть несколько модулей, предоставляющих эту самую поддержку. Есть нужна универсальность и куча языков, см. ICU, если нужна скорость и только базовый юникод (для русского языка подходит, если акценты удалить), см. здесь http://mobigroup.ru/page/debian ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2009, 16:38 |
|
|
start [/forum/topic.php?fid=54&msg=34900368&tid=2009433]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
140ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 241ms |
0 / 0 |