Комментарии 22
Можно обойтись без самосборки. 15 марта этого года в unstable появилсь сборка sqlite3, решающая данную проблему.
$ echo $LANG ru_RU.UTF-8 $ sudo apt-get -qq -t unstable install sqlite3 $ sqlite3 sqlite> SELECT "ы" LIKE "Ы"; 1
+5
Хорошая новость. Но в macports как всегда через год появится, если вообще появится…
+1
ну так соберите и сами и отправьте мэинтейнерам MacPorts
0
Хочу такое счастье на ipad. Не думаю что Apple одобрит sqlite3_enable_load_extension(), да и свежего, а значит, сырого кода sqlite тоже долго ждать прийдется.
Спасибо автору за пост, без статьи про грабли я бы не узнал что такие грабли есть.
Спасибо автору за пост, без статьи про грабли я бы не узнал что такие грабли есть.
0
А для windows есть решение?
0
К сожалению 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.
Попробуйте. Отпишитесь если удастся:)
0
Я прошу прощения, но
Давайте разберемЬся как же это исправить.
?
Давайте разберемЬся как же это исправить.
?
0
Я решал эту проблему другим образом.
Переопределил функцию LIKE и стал отрабатывать ее сам.
Кроме того я таким методом сразу устранил проблему иньекций и прочего.
Переопределил функцию LIKE и стал отрабатывать ее сам.
Кроме того я таким методом сразу устранил проблему иньекций и прочего.
+1
Тоже вариант, тогда и REGEXP тоже до кучи, мне ее в SQLite всегда не хватает.
И, как понимаю, вы от зависимости от ICU избавились?
И, как понимаю, вы от зависимости от ICU избавились?
0
Можно подробнее, как это сделать?
0
Это, наверное, должно дико тормозить?
0
Достаточно пропатчить массив sqlite3UpperToLower (надо бы его расширить) + исправить где-надо range, если мне память не изменяет.
0
Все конечно замечательно, но как быть если регистронезависимый поиск сделать надо, но перекомпилять невозможно (шаред хостинг к примеру).
0
так как гугл по запросу «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/
0
дополнения для 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
0
Ленивый вариант для русского 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; }
0
Мда, жаль без патча никак
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
SQLite и полноценный UNICODE