Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с like и кодировками / 15 сообщений из 15, страница 1 из 1
07.01.2010, 15:33
    #36399934
Luka_mal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
Не магу разобраться с кодировками.
Имеется база 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
07.01.2010, 15:38
    #36399939
Luka_mal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
пробовал еще вот так

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

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

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

Код: 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
08.01.2010, 17:44
    #36400817
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
Luka_mal,
в PHP это будет работать только в CGI, CLI или EMBED режимах.
...
Рейтинг: 0 / 0
11.01.2010, 02:31
    #36402793
Luka_mal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
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
11.01.2010, 02:34
    #36402795
Luka_mal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
PS:
php5.3.1
...
Рейтинг: 0 / 0
11.01.2010, 10:00
    #36402985
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
sqlite3.extension_dir установлена, каталог существует, права есть ?
...
Рейтинг: 0 / 0
11.01.2010, 11:50
    #36403190
Luka_mal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
Dmitry Arefiev,

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

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

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

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

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

думаю это не так!
php подключён как cgi и apache тут ни причём.
...
Рейтинг: 0 / 0
11.01.2010, 23:04
    #36404357
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с like и кодировками
См. исходники вашего любимого пхп:
Код: 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
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с like и кодировками / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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