Это ситуация: у меня есть таблица с именем «product», с полем с именем «code» (integer
) и с именем «name» (varchar
). Поле varchar
кодируется с помощью utf8, что является правильной кодировкой. Пока все хорошо.
Проблема начинается с того, что мне постоянно приходится concat
поля «код» и «имя». Это происходит очень часто и с множеством строк. Их объединение по какой-то причине скремблирует кодировку результата concat
, в результате чего на экране появляются забавные символы. Само по себе это можно исправить, добавив cast
к char
в поле «имя» во время concat, но я боюсь, что это может вызвать проблемы с производительностью при масштабировании системы, так как я вызываю функцию в каждой строке наборы результатов.
Могу ли я что-нибудь сделать со своей таблицей "product", чтобы исключить необходимость постоянного приведения? Возможно, настроить MySQL так, чтобы он всегда выбирал конкретную кодировку для своих результатов?
Версия MySQL: 5.0.51a. К сожалению, я не могу обновить его.
Создать оператор таблицы:
CREATE TABLE product (
id_product int(11) NOT NULL auto_increment,
code int(8) NOT NULL,
name varchar(255) character set utf8 NOT NULL,
id_unit int(11) NOT NULL,
PRIMARY KEY (id_product),
KEY id_unit (id_unit),
CONSTRAINT product_ibfk_1 FOREIGN KEY (id_unit) REFERENCES unit (id_unit) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=26
Запрос, который приводит к зашифрованной кодировке:
SELECT
CONCAT(code, ' - ', name)
FROM product
Я создал представление с указанным запросом, и в нем говорится (в phpMyAdmin), что результирующий столбец является varbinary без какой-либо кодировки. Возможно, это является причиной проблемы?