Table of Contents
一.问题描述
测试数据:
drop table test;
create table test (pid varchar(200),id varchar(200));
insert into test values (null,'中国');
insert into test values ('中国','广东');
insert into test values ('中国','广西');
insert into test values ('广东','深圳');
insert into test values ('深圳','福田');
with RECURSIVE t(pid,c1,c2,c3,lvl,id) as (
select id,null,null,null,1,id
from test
where pid is null
union all
select t.pid
,case when t.lvl=1 then test.id else t.c1 end as c1
,case when t.lvl=2 then test.id else t.c2 end as c2
,case when t.lvl=3 then test.id else t.c3 end as c3
,t.lvl+1
,test.id
from t
,test
where t.id=test.pid
)
select * from t
复制
运行报错:
mysql> with RECURSIVE t(pid,c1,c2,c3,lvl,id) as (
-> select id,null,null,null,1,id
-> from test
-> where pid is null
-> union all
-> select t.pid
-> ,case when t.lvl=1 then test.id else t.c1 end as c1
-> ,case when t.lvl=2 then test.id else t.c2 end as c2
-> ,case when t.lvl=3 then test.id else t.c3 end as c3
-> ,t.lvl+1
-> ,test.id
-> from t
-> ,test
-> where t.id=test.pid
-> )
-> select * from t;
ERROR 1406 (22001): Data too long for column 'c1' at row 1
复制
二.解决方案
网上找了一些解决方案,大致可以分为三类
- 字符集的问题
- sql_mode的问题
2.1 字符集问题
如下可以看到,我的字符集都是utf-8,所以这个可以排除
mysql> show variables like '%character%';
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | E:\mysql\mysql-8.0.19-winx64\share\charsets\ |
+--------------------------+----------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
复制
2.2 sql_mode的问题
在my.ini里找到
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
把其中的
STRICT_TRANS_TABLES,
去掉,然后重启mysql就ok了
参考:
- https://blog.csdn.net/zj15527620802/article/details/79770807
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
2981次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
852次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
496次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
436次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
373次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
292次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
279次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
274次阅读
2025-05-06 14:40:00
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
258次阅读
2025-04-30 12:17:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
249次阅读
2025-04-28 11:01:25