@gsdev99

Как правильно настроить sqlite, чтобы работал LIKE по кириллице?

Всем привет. Подскажите, пожалуйста, как правильно настроить, чтобы работал LIKE по кириллице?
Я использую sqlite3 в проекте на express.js
CREATE TABLE people (
  pbnum INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  pbfirstName VARCHAR(50) NOT NULL,
  pblastName VARCHAR(50) NOT NULL,
  pbcity VARCHAR(50) NOT NULL,
  pbphoneNumber VARCHAR(50) NOT NULL);


INSERT INTO people (pbfirstName, pblastName, pbcity, pbphoneNumber) VALUES
('user', 'one', 'Сочи', '+7 (111) 111-11-11'),
('user', 'two', 'Москва', '+7 (222) 222-22-22'),
('user', 'three', 'Москва', '+7 (333) 333-33-33'),
('user', 'four', 'Москва', '+7 (444) 444-44-44'),
('user', 'five', 'Москва', '+7 (555) 555-55-55');


SELECT * FROM people WHERE CONCAT (pbfirstName, pblastName, pbcity) LIKE "%со%"

'Сочи' в данном случае на попадает в выборку.
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
@deliro
Это всем известная баго-фича sqlite. Делай так:

SELECT * FROM people WHERE UPPER(CONCAT(pbfirstName, pblastName, pbcity)) LIKE '%СО%'


Обе части приводи к одному регистру, тогда LIKE работает. И раз у тебя wildcard всё равно с двух сторон, то про использование индексов всё равно можно забыть, так что это ничего не меняет.

Если бы wildcard был только с одной стороны, можно было бы создать функциональный индекс
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы