Я работаю над разработкой японского веб-сайта. У меня есть что-то вроде следующей базы данных в MySQL:
+--------+-------+
| id | kanji |
+--------+-------+
| 1 | 明 |
| 2 | 令 |
| 3 | 暗 |
| 4 | 週 |
+--------+-------+
Мне нужно сделать SELECT, чтобы при поиске значения «明暗» выбирались строки 1 и 3. Я знаю, что REGEXP может сделать что-то подобное с шаблоном [...], но, похоже, он плохо работает с китайскими (или в данном случае японскими) символами. Он показывает более широкий диапазон результатов. Кажется, что LIKE лучше работает с этой кодировкой, но я не знаю, как это сделать. Кто-нибудь знает, как сделать этот запрос?
Спасибо!
----- РЕДАКТИРОВАТЬ -----
Для REGEXP я пробую следующий запрос:
SELECT id, kanji
FROM kanjidic2
WHERE kanji REGEXP '[明暗]';
Однако это лишь некоторые из результатов (запрос обнаружил 3842 совпадения, из которых могло быть только 2).
Я знаю, что поиск с разделением будет работать (даже ИЛИ выполнит эту работу), но я не могу проскользнуть в строку, так как она задается переменной в php из панели поиска.
Какую версию MySQL вы используете? Многобайтовые символы в REGEXP были введены в версии 8.0, поэтому он не будет работать должным образом со старыми версиями. dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html (поддержка регулярных выражений)
@akky Я расшифровываю информацию, поскольку я новичок в mySQL: innodb_version: 5.6.39 protocol_version: 10 Я предполагаю, что это версия 10, но когда я запускаю REGEXP, результат запроса - намного больше строк, чем два с два символа в запросе: /
В предыдущем комментарии вы сказали, что не можете разбить строку поиска. Это почему? Не имеет значения, анализируется ли он как переменная PHP.
@Martin Основная причина в том, что я не знаю, как это сделать. Я думаю, что это могло бы превратиться в вопрос php, но мне было интересно, есть ли способ сделать это только с помощью SQL.
@ juan-camilo-orjuela не InnoDB или версия протокола. Версия MySQL не должна быть 5.x, если вы хотите использовать Unicode в REGEXP. Что означает «выбрать ВЕРСИЮ ();» возвращение? Я подозреваю, что у вас версия сервера MySQL 5.6 или что-то в этом роде.
@JuanCamiloOrjuela, лучший способ - обработать это в вашем PHP-скрипте, прежде чем отправлять его в MySQL. Однако в MySQL есть различные методы для разделения строк и получения желаемого результата.






Вы имеете в виду это?
SELECT * FROM TABLE WHERE KANJI IN (N'明','暗');