Писал тут хранимую процедуру под mysql (что важно: с параметром типа string). Написал, запустил (из-под phpmyadmin)... получаю ошибку: #2014 - Commands out of sync; you can't run this command now. Я понимаю, когда ловлю такое из-под phpmyadmin - это еще куда ни шло... А вот когда запускаю из консоли, под рутом - получил ошибку "ERROR 1253 (42000): COLLATION 'utf8_bin' is not valid for CHARACTER SET 'latin1'". Ага, подумал я. И поменля кодировку всей базы на utf8. Не поверите: заработало! И из консоли, и из под pma.
Подозреваю, что для процедур, у которых на входе нетекстовый параметр - такой проблемы может не существовать. Но для текстового параметра - вот так вот.
Для памяти:
Изменяем кодировку для базы данных:
ALTER DATABASE `имя базы` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Изменяем кодировку для таблицы:
ALTER TABLE `tablename` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `tablename` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Все естественно из-под рута.
Комментариев: 2 RSS
1 Стёпа 19-02-2019 10:06
Так где решение проблемы? С чем она связана? При чем тут кодировка?
2 Alexander Bashkirov 19-02-2019 13:23
Кодировка очень даже при чём.
Параметр хранимки в кодировке отличной от кодировки базы вызывает ошибку. Что непонятного-то?