MySQL函数与存储过程字符串长度限制的解决

作者:Taysuesue 时间:2024-01-16 13:17:01 

问题描述

MySQL函数或者存储过程中使用group_concat()函数导致数据字符过长而报错

CREATE DEFINER=`root`@`%` PROCEDURE `get_pipe_child`(IN `in_pipe2Num` varchar(25),IN `in_sectionNum` varchar(5))
BEGIN

?declare ids varchar(1000) default '';?
?declare tempids varchar(1000);?
?
?-- 先根据标段号查询出数据组成临时表
?DROP TEMPORARY TABLE IF EXISTS temp_weld_position;
?CREATE TEMPORARY TABLE temp_weld_position AS
?select t1.id,t1.section_num,t1.weld_code,t1.lon,t1.lat,t2.pipe1_num,t2.pipe2_num from
?? ?(select id,section_num,weld_code,lon,lat from weld_position where section_num = in_sectionNum and LENGTH(lon)>=7 and LENGTH(lat)>=6 and is_deleted=0) t1
?? ?join (select id,weld_code,pipe1_num,pipe2_num from weld_manage where section_num = in_sectionNum) t2 on t1.weld_code=t2.weld_code;

?-- 在根据传入的pipe2_num 递归查询出所有的数据,将pipe2_num当做id,pipe1_num当pid
?set tempids = in_pipe2Num;?
?while tempids is not null do?
? set ids = CONCAT_WS(',',ids,tempids);?
? select GROUP_CONCAT(pipe2_num) into tempids from temp_weld_position where FIND_IN_SET(pipe1_num,tempids)>0; ?
?end while;?
?
? ?select t1.id,t1.section_num,t1.weld_code,t1.lon,t1.lat,t2.pipe1_num,t2.pipe2_num from
? ?(select id,section_num,weld_code,lon,lat from weld_position where section_num = in_sectionNum and LENGTH(lon)>7 and LENGTH(lat)>6 and is_deleted=0) t1
? ?join (select id,weld_code,pipe1_num,pipe2_num from weld_manage where section_num = in_sectionNum) t2 on t1.weld_code=t2.weld_code
? ?where FIND_IN_SET(t2.pipe2_num,ids)
? ?order by FIND_IN_SET(t2.pipe2_num,ids);?? ??? ??? ??? ?
END

原因分析:

两个参数ids、tempids定义的varchar(1000),后续执行多次循环,GROUP_CONCAT拼接字符放入这两个参数时就会报字符串长度超限错误,因函数、存储过程中varchar类型最大长度为16383

解决方案:

将varchar(1000)类型变成text或者是BLOB类型解决此问题

来源:https://blog.csdn.net/Taysuesue/article/details/125272159

标签:MySQL,存储过程,字符串长度,限制
0
投稿

猜你喜欢

  • sql 存储过程分页代码 支持亿万庞大数据量

    2024-01-24 03:31:00
  • python用Joypy绘制嵴线图实例

    2022-03-07 02:50:43
  • PHP三层结构(上) 简单三层结构

    2023-06-20 06:36:07
  • elementUI el-table二次封装的详细实例

    2024-05-03 15:12:00
  • 如何拒绝同一张表单被多次提交?

    2009-12-16 18:46:00
  • MySQL截取和拆分字符串函数用法示例

    2024-01-21 14:24:55
  • Git常用场景使用之分支操作

    2022-01-06 02:10:56
  • Python学习之装饰器与类的装饰器详解

    2023-11-23 20:04:07
  • python字符串替换的2种方法

    2022-12-27 20:59:24
  • vscode写python时的代码错误提醒和自动格式化的方法

    2023-02-25 12:54:59
  • python opencv3实现人脸识别(windows)

    2023-11-09 11:21:17
  • MySQL Installer is running in Community mode 的解决办法

    2024-01-19 09:14:54
  • Django ValuesQuerySet转json方式

    2021-12-05 07:15:34
  • python3 unicode列表转换为中文的实例

    2021-02-13 20:06:06
  • 关于Python-pip安装失败问题及解决

    2021-03-13 05:07:41
  • Prometheus 监控MySQL使用grafana展示

    2024-01-21 07:18:53
  • Python管理Windows服务小脚本

    2023-11-07 17:30:59
  • windows下mysql 8.0.12安装步骤及基本使用教程

    2024-01-19 15:17:53
  • git push 本地项目推送到远程分支的方法(git命令版)

    2022-06-16 02:03:13
  • Python实现常见的回文字符串算法

    2022-07-10 10:32:29
  • asp之家 网络编程 m.aspxhome.com