Проблема на самом деле не в неанглийских символах. Основная проблема заключается в том, что вы храните сложный формат данных (JSON) в одной ячейке базы данных, а не разрабатываете базу данных для хранения отдельных фрагментов данных:
create table product_title (
product_id int(10) not null,
locale varchar(2) not null,
title varchar(200),
primary key (product_id, locale)
);
insert into product_title (product_id, locale, title) values (1, 'es', 'Leña');
insert into product_title (product_id, locale, title) values (1, 'en', 'Wood');
У вас есть реляционная база данных, но вы не создали ее вокруг своей структуры данных, поэтому вы не можете использовать большинство ее функций, включая такие базовые вещи, как WHERE
или ORDER BY
.
Вы можете исправить дизайн (пожалуйста, сделайте) или применить обходной путь:
- Если у вас последняя версия MySQL, вы можете сделать столбец
JSON
типа .
Вы можете создать две версии данных JSON и ожидать, что значения базы данных не будут иметь смешанных регистров:
$locale = 'es';
$termino = 'Leña';
$data = [
$locale => ":%{$termino}%"
];
$ascii = json_encode($data);
$unicode = json_encode($data, JSON_UNESCAPED_UNICODE);
// Use your framework's syntax instead:
$sql = 'SELECT * FROM product WHERE title IN (:ascii, :unicode)';
$params = [$ascii, $unicode];
Пожалуйста, обратите внимание, что нет никакого вменяемого обходного пути для использования подстановочных знаков LIKE.