建立视图后访问时出错

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】TiDB v4.0.10

【问题描述】

在navicat里,使用下面的脚本建表、建视图,脚本成功执行完成后,在右单击视图打开时报错:
1105 - line 1 column 64 near “_UTF8MB4’,') AS st_code,GROUP_CONCAT(c.st_nameSEPARATOR _UTF8MB4',') ASst_nameFROMttt_test.c_st_tabAScGROUP BYc.'bj_id

是group_concat函数的错,不使用这个函数就不会报错。

脚本如下:
drop table if exists c_st_tab;
create table c_st_tab (
st_id varchar(36) not null,
bj_id varchar(36),
st_code varchar(150),
st_name varchar(150),
primary key (st_id)
);

create or replace view v
as
select
c.bj_id,
group_concat(c.st_code) as st_code,
group_concat(c.st_name) as st_name
from c_st_tab c
group by c.bj_id;

e.bmp (276.9 KB)

我测试了一下,在命令行没有问题,你试试直接用命令行是否可行

create or replace view v 的时候是没有问题的,
问题出在select * from v;的时候;

确实,我们分析下,会尽快答复,多谢。

在v4.0.8的时候,是没有这个问题的,
在升级到v4.0.10以后,select 之前在v4.0.8的时候create的视图也没有这个问题,
在升级到v4.0.10以后,新create的视图,再select新的视图就出现了这个问题。

好的,感谢您的信息,正在查看。

可以 show create table 分别看下错误的视图 A,和从 4.0.8 升上来可以正确 select 的视图 B 嘛。
顺便看下 c_st_tab 的建表信息。

select * from ecp_apply_plate_v; – v4.0.8时建立,可以正常查询
show create table ecp_apply_plate_v;
CREATE ALGORITHM=UNDEFINED DEFINER=zd_cgpt_test@10.10.10.19 SQL SECURITY DEFINER VIEW ecp_apply_plate_v (ID, org_code, use_status, expiry_date, pro_category, pro_category_name, q_level, plate_type, plate_name) AS SELECT eoa.ID,eoa.org_code,1 AS use_status,eoab.board_expiry_date AS expiry_date,eoabc.category_code AS pro_category,eoabc.category_name AS pro_category_name,eoab.board_q_level AS q_level,eoab.board_type AS plate_type,eoab.board_type_name AS plate_name FROM (zd_cgpt_test.ecp_org_apply AS eoa LEFT JOIN zd_cgpt_test.ecp_org_apply_board AS eoab ON eoab.org_apply_id=eoa.id) LEFT JOIN (SELECT eoabc.board_id,GROUP_CONCAT(eoabc.board_pro_category_code SEPARATOR ‘,’) AS category_code,GROUP_CONCAT(eoabc.board_pro_category_name SEPARATOR ‘,’) AS category_name FROM (zd_cgpt_test.ECP_ORG_APPLY_BOARD_CATEGORY AS eoabc) GROUP BY eoabc.board_id) AS eoabc ON eoabc.BOARD_ID=eoab.board_id

select * from ecp_apply_plate_v_1; – v4.0.10时建立,查询时报错
show create table ecp_apply_plate_v_1;
CREATE ALGORITHM=UNDEFINED DEFINER=zd_cgpt_test@10.10.10.17 SQL SECURITY DEFINER VIEW ecp_apply_plate_v_1 (id, org_code, use_status, expiry_date, pro_category, pro_category_name, q_level, plate_type, plate_name) AS SELECT eoa.id,eoa.org_code,1 AS use_status,eoab.board_expiry_date AS expiry_date,eoabc.category_code AS pro_category,eoabc.category_name AS pro_category_name,eoab.board_q_level AS q_level,eoab.board_type AS plate_type,eoab.board_type_name AS plate_name FROM (zd_cgpt_test.ecp_org_apply AS eoa LEFT JOIN zd_cgpt_test.ecp_org_apply_board AS eoab ON eoab.org_apply_id=eoa.id) LEFT JOIN (SELECT eoabc.board_id,GROUP_CONCAT(eoabc.board_pro_category_code SEPARATOR _UTF8MB4‘,’) AS category_code,GROUP_CONCAT(eoabc.board_pro_category_name SEPARATOR _UTF8MB4‘,’) AS category_name FROM (zd_cgpt_test.ecp_org_apply_board_category AS eoabc) GROUP BY eoabc.board_id) AS eoabc ON eoabc.board_id=eoab.board_id

不同之处:
在v4.0.8建立视图时:SEPARATOR ‘,’
在v4.0.10建立视图时: SEPARATOR _UTF8MB4‘,’

别的地方都是一样的。

您好,这应该是一个bug,已经创建了 issue,多谢。
https://github.com/pingcap/tidb/issues/23027

@harveyor 可以升级到 v4.0.12 解决,多谢。

已经升级到了v4.0.12,问题已经完美解决,十分感谢!

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。