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

目录
  • 问题描述
  • 原因分析:
  • 解决方案:

问题描述

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类型解决此问题

到此这篇关于MySQL函数与存储过程字符串长度限制的解决的文章就介绍到这了,更多相关MySQL函数与存储过程字符串长度限制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何修改Mysql中group_concat的长度限制

    在mysql中,有个函数叫"group_concat",平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改 详细说明如下: 用了group_concat后,select里如果使用了limit是不起作用的. 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少.但你可以设置一下. 使用group_concat_max_len系统变量,你可以设置允许的最大

  • 深入聊聊MySQL中各种对象的大小长度限制

    目录 标识符的长度限制 权限表中范围字段的长度限制 数据库和表的数量限制 表大小的限制 字段数量和数据行大小的限制 字段数量限制 数据行大小限制 数据行大小限制示例 总结 今天给大家介绍一下 MySQL 8.0 中的各种对象的大小.长度以及数量限制. 标识符的长度限制 下表描述了各种不同类型标识符的最大长度. 标识符 最大长度(字符) 数据库 64(包括 NDB Cluster 8.0.18 以及更高版本) 表 64(包括 NDB Cluster 8.0.18 以及更高版本) 字段 64 索引

  • MySQL索引长度限制原理解析

    这篇文章主要介绍了MySQL索引长度限制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 索引 TextField是不支持建立索引的 MySQL对索引字段长度有限制 innodb引擎的每个索引列长度限制为767字节(bytes),所有组成索引列的长度和不能大于3072字节 myisam引擎的每个索引列长度限制为1000字节,所有组成索引列的长度和不能大于1000字节 varchar的最大长度是指字符长度,若数据库字符集为utf-8,则一个

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

    目录 问题描述 原因分析: 解决方案: 问题描述 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 varch

  • mysql函数之截取字符串的实现

    目录 一.mysql截取字符串函数 二.mysql截取字符串的一些栗子 mysql索引从1开始 一.mysql截取字符串函数 1.left(str,length) 从左边截取length 2.right(str,length)从右边截取length 3.substring(str,index)当index>0从左边开始截取直到结束  当index<0从右边开始截取直到结束  当index=0返回空 4.substring(str,index,len) 截取str,从index开始,截取len长

  • 利用PHP函数计算中英文字符串长度的方法

    本文实例讲述了利用PHP函数计算中英文字符串长度的方法.分享给大家供大家参考.具体实现方法如下: 一般来说大家知道英文字符占一个字节,而中文字符gbk占两个字符,utf8占三个字符,很多人印象中php计算字符串长度就是strlen()函数,其实不然,它计算的是字节的长度而非字符的长度,那么如何获取一个字符串中字符的长度呢?还有有mb_strlen(). 具体代码如下: 复制代码 代码如下: echo $str = 'PHP点点通'; echo strlen($str); //3*1+3*3=12

  • C语言strlen函数实现读取字符串长度详解

    目录 前言 1.函数strlen 2.使用指针 3.指针改进 4.使用递归 5.my_strlen函数的参数改进—常量指针 总结 前言 读取字符串的长度,使用函数 strlen.这里我们写一个函数,来读取字符串的长度,本文内容主要包括: 使用strlen 使用指针:是常规的方法,但是要创建变量 指针改进:不需要创建变量,要求高,不易掌握 使用递归:不需要创建变量,要求高,不易掌握 介绍常量指针—— const char* str 1.函数strlen int main() { char arr[

  • C语言多种获取字符串长度的方法

    在C语言中,想要获取字符串长度可以有很多方法,下面分别介绍 一.使用sizeof()运算符 在C语言中,sizeof() 是长度的运算符,括号中可以放入数据类型或者表达式,一般我们用来计算字符串长度. 基本用法: int i=10; sizeof(i);//表达式 char str[]="hello world"; sizeof(str); sizeof(double);//数据类型 在使用sizeof()求字符串长度时,会将 '\0' 也计算到字符串长度中.例如"abcd&

  • mysql获取字符串长度函数(CHAR_LENGTH)

    length:   是计算字段的长度一个汉字是算三个字符,一个数字或字母算一个字符CHAR_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符.一个多字节字符算作一个单字符.对于一个包含五个二字节字符集, LENGTH()返回值为 10,而CHAR_LENGTH()的返回值为5.CHARACTER_LENGTH(str) CHARACTER_LENGTH()是CHAR_LENGTH()的同义词.BIT_LENGTH(str) 返回2进制长度.例如:可以查出用户名长度少于6个字

  • MySQL截取和拆分字符串函数用法示例

    本文实例讲述了MySQL截取和拆分字符串函数用法.分享给大家供大家参考,具体如下: 首先说截取字符串函数: SUBSTRING(commentid,9) 这个很简单,从第9个字符开始截取到最后.SUBSTRING的参数有三个,最后一个是截取的长度,默认是到结尾,负数是倒数第几位. 接着说拆分字符串函数: SUBSTRING_INDEX(commentid, '-', 1) 这个就稍稍复杂一些了,他的意思是以 - 进行拆分字符串,从第一个关键词开始取前面所有的字符串.如果上面的第三个参数修改为 -

  • 详解MySQL中的存储过程和函数

    目录 区别 优点 创建储存函数和过程 储存过程 储存函数 查看储存过程 操作 变量 赋值 变量例子 定义条件和处理过程 条件 处理程序 游标 流程控制语句 储存过程和函数就是数据器将一些处理封装起来,调用 区别 调用储存过程只需要使用CALL,然后指定储存名称和参数,参数可以是IN.OUT和INOUT 调用储存函数只需要使用SELECT,指定名称和参数,储存函数必须有返回值,参数只能是IN 优点 良好的封装性 应用程序和SQL逻辑分离 让SQL也具有处理能力 减少网络交互 能够提高系统性能 降低

  • php自定义函数实现统计中文字符串长度的方法小结

    本文实例讲述了php自定义函数实现统计中文字符串长度的方法.分享给大家供大家参考,具体如下: 中文字符计算为2个字符 英文字符计算为1个 代码 /** * 可以统计中文字符串长度的函数 * */ function abslength($str) { $len=strlen($str); $i=0; while($i<$len) { if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str

  • php常用字符串长度函数strlen()与mb_strlen()用法实例分析

    本文实例讲述了php常用字符串长度函数strlen()与mb_strlen()用法.分享给大家供大家参考,具体如下: int strlen ( string $string ) int strlen ( string $string )  获取给定字符串的[字节]长度 成功则返回字符串$string的长度,如果$string为空,则返回 0. <?php $str1 = "abcdef"; //输出6 $str2 = " ab cd "; //输出7,注意,开

随机推荐