如何在MySQL上修复/避免concat的编码混乱?

时间:2018-08-29 21:47:00

标签: mysql sql

这是这种情况:我有一个名为“ product”的表,其中有一个名为“ code”(integer)的字段和一个名为“ name”(varchar)的字段。 varchar字段使用utf8编码,这是正确的编码。到目前为止一切都很好。

问题开始了,因为我必须不断地concat“代码”和“名称”字段。它经常发生,并且有很多行。出于某种原因连接这些会扰乱concat结果的编码,从而导致有趣的字符出现在屏幕上。通过在concat期间的“名称”字段中向cast添加char本身可以解决此问题,但是我担心它会随着系统扩展而导致性能问题,因为我在结果集的每一行。

我可以对我的“产品”表做些什么来消除对常量转换的需求吗?也许将MySQL配置为始终为其concat结果选择特定的编码?

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。也许这就是问题的原因?

0 个答案:

没有答案