Как исправить / избежать схватки кодирования concat на MySQL? - PullRequest
0 голосов
/ 30 августа 2018

Это ситуация: у меня есть таблица с именем «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 без какой-либо кодировки. Возможно, это является причиной проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...