Всем привет, На одном сервере Mysql столкнулся с проблемой. Есть функция, которая возвращает имя по коду. Таблица regions Код (Text): id integer name varchar(128) В phpMyAdmin запрос Код (Text): select id, name from regions; возвращает все как нужно. Функция get_reg_name Код (Text): BEGIN DECLARE regname varchar(128) DEFAULT ""; SELECT reg_name INTO regname FROM regions WHERE reg_id = regid; RETURN regname; END И запрос Код (Text): select id, name, get_reg_name(id) as region from regions; вместо возвращаемого значения из функции ставит знаки вопроса. При доступе через php абракадабра. Для возвращаемого значения из функции стоит кодировка utf8, все как и на других хостингах. Дамп базы один и тот же. Что это может быть? Спасибо
Вопрос в том, что из таблицы возвращается строка в правильной кодировке, но эта же строка через function в phpMyAdmin возвращается, как строка из ?????????????
Так там все правильно. И phpMyAdmin и сайт на php, все, что выбирается из базы данных отображает правильно, кроме строк, выбираемых через функции mysql. На одном сервере помогло явное указание кодировки Код (Text): RETURNS varchar(128) CHARSET utf8mb4 вместо Код (Text): RETURNS varchar(128) CHARSET utf8 при загрузке дампа базы данных. Видать все зависит от настроек mysql по умолчанию.
https://www.php.net/manual/ru/mysqli.set-charset.php https://stackoverflow.com/questions/4361459/php-pdo-charset-set-names
Проблема была не только с php, а и с самой базой данных. Данные из таблиц выбирались правильно, проблема с кодировкой была только с возвращаемыми параметрами из пользовательских функций.