创建到表时,GROUP_CONCAT在视图上剪切错误

时间:2017-05-15 20:33:18

标签: mysql view group-concat

我将视图定义为:

CREATE OR REPLACE VIEW my_view 
AS SELECT some_table.some_id AS id,
SUBSTRING(GROUP_CONCAT(some_table.value), 1, 1000) AS other_field 
FROM some_table 
WHERE some_table.some_other_id = 5 GROUP BY some_table.some_id;

如果我查询整个表格,我会得到所有预期的结果,截断为1000个字符。

但是,如果我尝试这样做:

CREATE TABLE my_table SELECT * FROM my_view LIMIT 1;

我收到错误:

Row 254468 was cut by GROUP_CONCAT()

检查每个CHAR_LENGTH的{​​{1}}表示它们都是1000个字符或更少。

other_field目前设置为200,000。

为什么group_concat_max_len会出错,但CREATE TABLE本身不会出错?

SELECT * ...

1 个答案:

答案 0 :(得分:1)

将视图修改为...

CREATE OR REPLACE VIEW my_view 
AS SELECT some_table.some_id AS id,
cast(substring(GROUP_CONCAT(some_table.value),1,1000) as char(1000)) AS other_field 
FROM some_table 
WHERE some_table.some_other_id = 5 
GROUP BY some_table.some_id;

或更改create table以单独选择字段并将other_field强制转换为varchar(1000)。

我认为正在发生的是引擎做的抽样,以评估用于表的数据类型和大小仅对几行进行采样。以后的记录中的大小可能会更大,从而导致插入失败。解决方法明确定义连接字段的列大小。默认情况下,我相信引擎会在视图中使用blob,这样就可以了。但是create table对数据进行采样以尝试确定数据类型,因为大小不是bl​​ob;我相信它正在尝试创建一个varchar数据类型但是它的大小不正确