Как использовать 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);
Другие вопросы по тегам