Комментарии 22
Можно обойтись без самосборки. 15 марта этого года в unstable появилсь сборка sqlite3, решающая данную проблему.
$ echo $LANG ru_RU.UTF-8 $ sudo apt-get -qq -t unstable install sqlite3 $ sqlite3 sqlite> SELECT "ы" LIKE "Ы"; 1
Хорошая новость. Но в macports как всегда через год появится, если вообще появится…
ну так соберите и сами и отправьте мэинтейнерам MacPorts
Хочу такое счастье на ipad. Не думаю что Apple одобрит sqlite3_enable_load_extension(), да и свежего, а значит, сырого кода sqlite тоже долго ждать прийдется.
Спасибо автору за пост, без статьи про грабли я бы не узнал что такие грабли есть.
Спасибо автору за пост, без статьи про грабли я бы не узнал что такие грабли есть.
А для windows есть решение?
К сожалению windows'а у меня нет… Но думаю, точно так же можно собрать с помощью MSVC. В крайнем случае попробовать cygwin.
ICU для windows есть: icu-project.org/download/4.0.html#ICU4C
При компилляции SQLite с поддержкой ICU нужно указать дефайн SQLITE_ENABLE_ICU(-DSQLITE_ENABLE_ICU для gcc, для MSVC не знаю). Ну и соответствено путь к хидерам и к самой либе ICU.
Попробуйте. Отпишитесь если удастся:)
ICU для windows есть: icu-project.org/download/4.0.html#ICU4C
При компилляции SQLite с поддержкой ICU нужно указать дефайн SQLITE_ENABLE_ICU(-DSQLITE_ENABLE_ICU для gcc, для MSVC не знаю). Ну и соответствено путь к хидерам и к самой либе ICU.
Попробуйте. Отпишитесь если удастся:)
Я прошу прощения, но
Давайте разберемЬся как же это исправить.
?
Давайте разберемЬся как же это исправить.
?
Я решал эту проблему другим образом.
Переопределил функцию LIKE и стал отрабатывать ее сам.
Кроме того я таким методом сразу устранил проблему иньекций и прочего.
Переопределил функцию LIKE и стал отрабатывать ее сам.
Кроме того я таким методом сразу устранил проблему иньекций и прочего.
Тоже вариант, тогда и REGEXP тоже до кучи, мне ее в SQLite всегда не хватает.
И, как понимаю, вы от зависимости от ICU избавились?
И, как понимаю, вы от зависимости от ICU избавились?
Можно подробнее, как это сделать?
Это, наверное, должно дико тормозить?
Достаточно пропатчить массив sqlite3UpperToLower (надо бы его расширить) + исправить где-надо range, если мне память не изменяет.
Все конечно замечательно, но как быть если регистронезависимый поиск сделать надо, но перекомпилять невозможно (шаред хостинг к примеру).
так как гугл по запросу «sqlite icu lower» выдает ссылку на эту страницу одной из первых, небольшой апдейт :)
1) sqlite3 на текущий момент собирается без icu (как написано в ченджлоге, это создало проблем больше, чем решило)
2) для AMD64 при сборке icu надо указывать параметр -fPIC
3) чтобы собранный с icu sqlite3 правильно установить в Ubuntu, надо configure вызывать с параметром prefix, иначе либа установиться в папку /usr/local/, и системно будет использоваться версия, установленная apt-get
1) sqlite3 на текущий момент собирается без icu (как написано в ченджлоге, это создало проблем больше, чем решило)
2) для AMD64 при сборке icu надо указывать параметр -fPIC
3) чтобы собранный с icu sqlite3 правильно установить в Ubuntu, надо configure вызывать с параметром prefix, иначе либа установиться в папку /usr/local/, и системно будет использоваться версия, установленная apt-get
$ CFLAGS='-Os -DSQLITE_ENABLE_ICU' CPPFLAGS=`icu-config --cppflags` LDFLAGS=`icu-config --ldflags` ./configure --prefix=/usr/
дополнения для debian:
1. wget в stable записывает имя файла как getfile\?f\=sqlite%2Fext%2Ficu%2Ficu.c => лучше поправить:
$ wget www.sqlite.org/cvstrac/getfile?f=sqlite/ext/icu/icu.c -O icu.c
2. для сборки необходим пакет libsqlite3-dev:
$ sudo apt-get install libsqlite3-dev
1. wget в stable записывает имя файла как getfile\?f\=sqlite%2Fext%2Ficu%2Ficu.c => лучше поправить:
$ wget www.sqlite.org/cvstrac/getfile?f=sqlite/ext/icu/icu.c -O icu.c
2. для сборки необходим пакет libsqlite3-dev:
$ sudo apt-get install libsqlite3-dev
Ленивый вариант для русского LIKE в sqlite-amalgamation-3_7_2 (работает без icu):
-# define GlogUpperToLower(A) if( A<0x80 ) { A = sqlite3UpperToLower[A]; }
+# define GlogUpperToLower(A) if( A<0x80 ) { A = sqlite3UpperToLower[A]; } if ( A >= 0x0410 && A <= 0x042f) { A += 0x20; }
Мда, жаль без патча никак
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
SQLite и полноценный UNICODE