• 0
walexw

Верхний регистр для кирилицы

Вопрос

БД SQLite
Для поиска записей по текстовым полям, для игнорирования регистра использую примерно такую конструкцию:
SELECT UPPER(city) FROM table1 WHERE id=1 OR id=100 (это запрос для примера, в реальном запросе UPPER стоит в WHERE)
в 1-й записи Paris, отрабатывает PARIS
в 100-й записи Париж, отрабатывает Париж (ни в верхний, ни в нижний регистр не переводится)
Как сделать, чтобы и англоязычное и русскоязычное заполнение стринговых полей обрабатывалось одинаково правильно?

Спасибо!
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

5 ответов на этот вопрос

  • 0
13 минут назад, walexw сказал:

БД SQLite
Для поиска записей по текстовым полям, для игнорирования регистра использую примерно такую конструкцию:
SELECT UPPER(city) FROM table1 WHERE id=1 OR id=100 (это запрос для примера, в реальном запросе UPPER стоит в WHERE)
в 1-й записи Paris, отрабатывает PARIS
в 100-й записи Париж, отрабатывает Париж (ни в верхний, ни в нижний регистр не переводится)
Как сделать, чтобы и англоязычное и русскоязычное заполнение стринговых полей обрабатывалось одинаково правильно?

Спасибо!

куда вы выгружаете данные?

для Delphi нужно использовать AnsiUpperCase

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

На форуме уже обсуждалась подобная проблема: Зависимость от регистра русских символов при использовании LIKE

Kitty и walexw понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
В 18.10.2016 в 19:44, Евгений Корепов сказал:

Выполните этот запрос в консоли сервера, будет работать UPPER?

В консоли та же песня. Английские буквы слушаются, русские без изменений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, walexw сказал:

В консоли та же песня. Английские буквы слушаются, русские без изменений.

Так и должно быть, sql сервер не знает что вы собираетесь хранить в таблице, какой язык именно будет использоваться для хранения, сортировки и т.п. Вы должны сами указать sql серверу как он должен обращаться с текстом. Для этого есть свойства Collation (ну и Character Set), обычно установить эти свойства можно глобально для сервера или конкретно для базы или таблицы. К сожалению не имел опыта работы именно с SQLite, но принцип везде один. При изменении этих свойств для наполненной данными таблицы будьте осторожны, с большой вероятностью русский язык переколбасит, так что сделайте бэкап.

Параметры можно установить конкретно для языка, к примеру "CharacterSet=cp1251 -- Windows Cyrillic" "Collation=cp1251_general_ci", или более универсально "CharacterSet=utf8 -- UTF8 Unicode" "Collation=utf8_general_ci" - русский язык должен работать корректно. 

Равиль Зарипов (ZuBy) понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу