powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с like и кодировками
15 сообщений из 15, страница 1 из 1
Помогите с like и кодировками
    #36399934
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не магу разобраться с кодировками.
Имеется база Sqlite3
PRAGMA encoding показывает UTF-8
sqlite_libencoding() показывает iso8859

необходимо выполнить селект из таблицы
CREATE TABLE address (
cid INTEGER,
id INTEGER,
fid INTEGER,
adr_id INTEGER,
sfn TEXT,
firmname TEXT,
firmname_A5 TEXT,
cr_id INTEGER,
strn_id INTEGER,
house TEXT,
lit TEXT,
office TEXT,
ext TEXT,
allinfo TEXT,
prior INTEGER,
order_name INTEGER,
order_post INTEGER
)

SELECT sfn from address where cid=3439 and firmname LIKE '%$org%'
но кирилица не воспринимается и выдаются не те результаты

поиск вывел на
http://www.sql.ru/forum/actualthread.aspx?tid=527284
http://www.sql.ru/forum/actualthread.aspx?tid=707237
http://geomapx.blogspot.com/2009/10/collation-icu-sqlite.html

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Для удобства работы с русским текстом в SQLite можно сделать автоматическое подключение нужного collation. Это позволит проводить сортировку и регистронезависимый поиск для русскоязычных текстов. В рассылке sqlite-users периодически пробегает вопрос, как же сделать такое для того или иного языка, а уж в рунете и вовсе этот вопрос "притча во языцех".

При этом сразу после открытия базы мы увидим следующее:


$ sqlite3
sqlite> pragma collation_list;
 0 |russian
 1 |NOCASE
 2 |RTRIM
 3 |BINARY



Таким образом, получаем встроенную поддержку руссого языка, достаточно лишь для поля таблицы указать "collate russian".

Для дебиана можно брать пакеты из моего репозитория. Для виндоус можно взять не сильно свежую версию SQLite с ICU
здесь (вот только не обещаю, что коллэйшен russian там автоматически грузится, поскольку сборку делал отнюдь не для русскоговорящих пользователей). Так что лучше взять последнюю версию SQLite с офсайта, пропатчить и скомпилировать с ICU, который я уже собрал и выложил тут.

Патч объявляет коллэйшен "ru_RU" как "russian" непосредственно при открытии подключения.


--- sqlite3-3.6.19.orig/ext/icu/icu.c
+++ sqlite3- 3 . 6 . 19 /ext/icu/icu.c
@@ - 482 , 6  + 482 , 19  @@
     );
   }

+  UErrorCode status = U_ZERO_ERROR;
+  UCollator *pUCollator = ucol_open("ru_RU", &status);
+  if( !U_SUCCESS(status) ){
+    return SQLITE_ERROR;
+  }
+
+  rc = sqlite3_create_collation_v2(db, "russian", SQLITE_UTF16, (void *)pUCollator,
+      icuCollationColl, icuCollationDel
+  );
+  if( rc!=SQLITE_OK ){
+    ucol_close(pUCollator);
+  }
+
   return rc;
 }


пожалуйста ткните пальцем, что нужно сделать, а то не могу въехать
как, что и куда
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36399939
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал еще вот так

SELECT * from address where cid=3439 and firmname LIKE '%".utf8_encode($org)."%'

но результат тот же
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36400449
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
Файлик http://mobigroup.ru/files/sqlite-ext/unifuzz.zip содержит расширение для нативной поддержки юникода под виндоус. Автор обещал учесть мои пожелания касаемо поддержки кириллицы и необходимых функций, но проверить их работу по понятным причинам он не мог. Планирую найти для такого дела виндоус и проверить, но это для меня далеко не срочно.

не могу понять как unifuzz.dll прикрутить к php
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36400662
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В консоли вот с этим разобрался

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
Пару дней назад меня попросили собрать виндовый модуль ICU для SQLite (позволяет выполнять сортировку символов национальных алфавитов) - как ни странно, нигде в инете не нашлось готового. Брать здесь:

http://dload.mobigroup.ru/sqlite-ext/icu/ 3 . 6 . 2 /

Для работы libSqliteIcu.dll необходимы библиотеки icuin38.dll, icuuc38.dll, icudt38.dll и
mingwm10.dll.

.load './libSqliteIcu.dll'

select lower('ПРИВЕТ Ё-МОЁ!');
привет ё-моё!

SELECT icu_load_collation('ru_RU', 'russian');

PRAGMA collation_list;

CREATE TABLE test (
  name TEXT --COLLATE russian
);

insert into test values ('Привет!');
insert into test values ('Ё-моё');
insert into test values ('привет');
insert into test values ('ё-прст');
insert into test values ('ага!');
insert into test values ('ё-моё');


Теперь сравните результат выполнения следующих запросов:

select * from test order by name;
и
select * from test order by name COLLATE russian;

но как сделать в php вот это .load './libSqliteIcu.dll' ???

пробую вот так
$dbaa = new Sqlite3('test.dat');
$dbaa->loadExtension('libSqliteIcu.dll');
выдаёт ошибку
Warning: SQLite3::loadExtension(): Not supported in multithreaded Web servers in
SQLite3::loadExtension() не поддерживается многопоточными севревами...
Куда рыть ума не приложу
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36400817
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Luka_mal,
в PHP это будет работать только в CGI, CLI или EMBED режимах.
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36402793
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

echo php_sapi_name();
показывает cgi-fcgi


$dbaa = new Sqlite3('oper.dat');
$r = $dbaa->loadExtension('libSqliteIcu.dll');
даёт ошибку
Warning: SQLite3::loadExtension(): SQLite Extension are disabled in
кто, зачем блокирует???

Опять тупик!!!



SQLite3::loadExtension

(PHP 5 >= 5.3.0)

SQLite3::loadExtension — Attempts to load an SQLite extension library
Report a bug
Description
public bool SQLite3::loadExtension ( string $shared_library )

Attempts to load an SQLite extension library.
Report a bug
Parameters

shared_library

The name of the library to load. The library must be located in the directory specified in the configure option sqlite3.extension_dir.

Report a bug
Return Values

Returns TRUE if the extension is successfully loaded, FALSE on failure.
Report a bug
Examples

Example #1 SQLite3::loadExtension() example
<?php
$db = new SQLite3('mysqlitedb.db');
$db->loadExtension('libagg.so');
?>


что делать? и куда рыть???
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36402795
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS:
php5.3.1
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36402985
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqlite3.extension_dir установлена, каталог существует, права есть ?
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36403190
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Arefiev,

sqlite3.extension_dir = "c:/php/sqlite"

и новая ошибка

Warning: SQLite3::loadExtension(): Unable to open extensions outside the defined directory
не удаётся открыть расширение за пределами каталога?

Не знаю как воспользоваться данной информацией, каких-то прав доступа не хватает???
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36403506
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Arefievsqlite3.extension_dir установлена, каталог существует, права есть ?

Эксперты помогите!

sqlite3.extension_dir = "c:/php/sqlite" установлена,
каталог и файл существуют,
права есть (echo is_readable("c:/php/sqlite/libSqliteIcu.dll"); возвращает 1)

$dbaa = new Sqlite3('oper.dat');
$r = $dbaa->loadExtension('libSqliteIcu.dll');
приводит к ошибке
Warning: SQLite3::loadExtension(): Unable to open extensions outside the defined directory in

подскажите где ещё порыть можно, что бы это всё заработало???
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36404014
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Luka_mal,
Загляни в php-5.3.1\ext\sqlite3\sqlite3.c
Начиная со строки 295 находится реализация этого метода, там и смотришь что конкретно проверяется для выдачи той или иной ошибки.
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36404072
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНачиная со строки 295 находится реализация этого метода, там и смотришь что конкретно проверяется для выдачи той или иной ошибки.
Кажется мне, что тут больше дело в PHP, так как SQLite пофигу, из какого
каталога расширение загружено. В SQLite их загрузка либо разрешена, либо
запрещена.
Luka_malloadExtension('libSqliteIcu.dll')
Ну может в PATH присутствует несколько libSqliteIcu.dll ? И берется DLL вовсе
не из c:/php/sqlite. Попробуй указать полный путь к DLL.

PS: А вот что там на самом деле в PHP - не знаю я его ...
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36404179
Мне кажется это на уровне апача php.ini запрещает подгрузку всяких внешних библиотек
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36404240
Luka_mal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Максим-ИвановМне кажется это на уровне апача php.ini запрещает подгрузку всяких внешних библиотек

думаю это не так!
php подключён как cgi и apache тут ни причём.
...
Рейтинг: 0 / 0
Помогите с like и кодировками
    #36404357
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
См. исходники вашего любимого пхп:
Код: plaintext
1.
2.
3.
        if (strncmp(fullpath, extension_dir, extension_dir_len) !=  0 ) {
          php_sqlite3_error(db_obj, "Unable to open extensions outside \
the defined directory");  RETURN_FALSE;
        }

Правильно вам советовали указать _полный_ путь к расширению.

P.S. И не здесь нужно про пхп спрашивать, для этого есть другие форумы/рассылки/etc.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с like и кодировками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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