为什么CONCAT会截断我的UTF-8字符串?

时间:2014-04-06 05:12:05

标签: mysql concat

我的一些专栏被截断了。经过一些研究,我设法创建了这个最小工作示例,适用于MySQL 5.0.96-community:

DROP TABLE IF EXISTS test;
CREATE TABLE test (
  a char(3),  
  b char(3),  
  c smallint
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO test VALUES(
  "אאא",
  "בבב",
  111);

SELECT CONCAT(a,b,c) FROM test;  
   // RESULT: "אאאבבב111"

DROP TABLE IF EXISTS test2;
CREATE TABLE test2 SELECT CONCAT(a,b,c) AS d FROM test;

SELECT d FROM test2;
   // RESULT: "אאאבבב"

这是一个错误还是一个功能?

2 个答案:

答案 0 :(得分:1)

CAST intchar。我希望,它会奏效。

CREATE TABLE test2 SELECT CONCAT(a,b,CAST(c AS CHAR)) AS d FROM test;

<强>更新

在Orbit评论中的Lightness Races之后,我为自己尝试了。通常,它工作得很好。但是,由于你的版本有点旧版本,它无效。

您可以按照以下方式使用它:

CREATE TABLE test2 (d char(9));

INSERT INTO test2
    SELECT CONCAT(a,b,c) AS d FROM test;

请参阅sqlfiddle:http://sqlfiddle.com/#!8/d9433/1

答案 1 :(得分:0)

您未指定新表格应为UTF-8。

CREATE TABLE test2 CHARSET=utf8 SELECT CONCAT(a,b,c) AS d FROM test;
--                 ^^^^^^^^^^^^^