GROUP_CONCAT 创建到 table 时在视图上剪切错误
GROUP_CONCAT cut error on view when creating to table
我有一个定义为的视图:
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;
如果我查询整个 table,我会得到所有预期的结果,被截断为 1000 个字符。
但是,如果我尝试这样做:
CREATE TABLE my_table SELECT * FROM my_view LIMIT 1;
我收到错误:
Row 254468 was cut by GROUP_CONCAT()
检查每个 other_field
的 CHAR_LENGTH
显示它们都是 1000 个字符或更少。
group_concat_max_len
当前设置为 200,000。
为什么 CREATE TABLE
给出了错误,而 SELECT * ...
本身却没有?
CREATE TABLE `some_table` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`some_other_id` int(11) DEFAULT NULL,
`some_id` int(11) NOT NULL,
`value` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48190231 DEFAULT CHARSET=utf8;
将视图修改为...
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;
或单独更改创建 table 到 select 字段并将 other_field 转换为 varchar(1000)。
我认为正在发生的事情是引擎所做的采样,以评估用于 table 的数据类型和大小仅对少数行进行采样。后续记录的大小可能会更大,从而导致插入失败。要解决明确定义串联字段的列大小。默认情况下,我相信引擎会在视图中使用 blob,这样就可以了;但是 create table 对数据进行采样以尝试确定数据类型,因为大小不是 blob;我相信它正在尝试创建 varchar 数据类型但大小不正确
我有一个定义为的视图:
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;
如果我查询整个 table,我会得到所有预期的结果,被截断为 1000 个字符。
但是,如果我尝试这样做:
CREATE TABLE my_table SELECT * FROM my_view LIMIT 1;
我收到错误:
Row 254468 was cut by GROUP_CONCAT()
检查每个 other_field
的 CHAR_LENGTH
显示它们都是 1000 个字符或更少。
group_concat_max_len
当前设置为 200,000。
为什么 CREATE TABLE
给出了错误,而 SELECT * ...
本身却没有?
CREATE TABLE `some_table` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`some_other_id` int(11) DEFAULT NULL,
`some_id` int(11) NOT NULL,
`value` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48190231 DEFAULT CHARSET=utf8;
将视图修改为...
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;
或单独更改创建 table 到 select 字段并将 other_field 转换为 varchar(1000)。
我认为正在发生的事情是引擎所做的采样,以评估用于 table 的数据类型和大小仅对少数行进行采样。后续记录的大小可能会更大,从而导致插入失败。要解决明确定义串联字段的列大小。默认情况下,我相信引擎会在视图中使用 blob,这样就可以了;但是 create table 对数据进行采样以尝试确定数据类型,因为大小不是 blob;我相信它正在尝试创建 varchar 数据类型但大小不正确