Как использовать COLLATE в подготовленном MySQL заявлении
Мне нужно указать COLLATE в связи с LIKE внутри подготовленного оператора внутри хранимой процедуры, например <col> LIKE ? COLLATE utf8_unicode_ci
, Я получаю следующую ошибку:
COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'binary'
Я также попытался привести параметр ко всем: LIKE _utf8 ? COLLATE utf8_unicode_ci
, LIKE CONVERT(? AS utf8) COLLATE utf8_unicode_ci
а также LIKE CAST(? AS varchar CHARACTER SET utf8) COLLATE utf8_unicode_ci
но ошибка тогда что-то вроде:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'varchar CHARACTER SET utf8) COLLATE utf8_unicode_ci ...
Любая подсказка будет принята с благодарностью.
1 ответ
AFAIK, то _utf8
является частью синтаксиса для строковых литералов. Так как у вас нет, вы не можете использовать его.
Подпись дляCAST()
это:
CAST(expr AS type)
Я думаю, что вы действительно хотитеCONVERT()
:
CONVERT(expr,type), CONVERT(expr USING transcoding_name)
[...]
CONVERT () с USING преобразует данные между различными наборами символов. В MySQL имена транскодирования совпадают с именами соответствующих наборов символов. Например, этот оператор преобразует строку 'abc' в наборе символов по умолчанию в соответствующую строку в наборе символов utf8:
SELECT CONVERT('abc' USING utf8);