gpt4 book ai didi

mysql - 创建表时 View 上的 GROUP_CONCAT 剪切错误

转载 作者:行者123 更新时间:2023-11-29 10:49:30 27 4
gpt4 key购买 nike

我的 View 定义为:

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()

检查每个 other_fieldCHAR_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;

最佳答案

将 View 修改为...

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;

或更改创建表以单独选择字段并将 other_field 转换为 varchar(1000)。

我相信正在发生的是引擎进行的采样,以评估表中使用的数据类型和大小,仅对少数行进行采样。后面的记录的大小可能会更大,导致插入失败。要解决显式定义连接字段的列大小的问题。默认情况下,我相信引擎会在 View 中使用 blob,这样就可以了;但是创建表会对数据进行采样以尝试确定数据类型,并且由于大小不是 blob;我相信它正在尝试创建 varchar 数据类型,但其大小不正确

关于mysql - 创建表时 View 上的 GROUP_CONCAT 剪切错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43988346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com