Перейти к содержанию
Fire Monkey от А до Я
  • 0

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


walexw

Вопрос

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

Спасибо!
 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
13 минут назад, walexw сказал:

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

Спасибо!

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

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

Ссылка на комментарий
  • 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" - русский язык должен работать корректно. 

Ссылка на комментарий
  • 0

Доброго времени суток.
Иной раз "лучше поздно, чем никогда".
Тоже недавно столкнулся с этой проблемой (некорректная работа UPPER в SQLite).
При поиске наткнулся на эту статью: https://habr.com/ru/sandbox/98493/
Автор, к сожалению, неизвестен.
Но на ее основе удалось сформировать несколько функций в среде Delphi.
Если кому-то поможет - буду рад.
См. здесь:
https://roamer55.ru/main_programming/delphi/delphi_10_2_vcl/d10_funcs_db/d10_funcs_db_sqlite/d10_funcs_db_sqlite_upper/

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...