这是这种情况:我有一个名为“ 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。也许这就是问题的原因?