mysql 错误 [Err] 1260 - Row * was cut by GROUP_CONCAT()

本文介绍了解决MySQL中GROUP_CONCAT函数长度限制的方法,包括修改配置文件和使用SQL语句临时调整最大长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在处理数据的时候,进行一对多处理的时候,单个字段的数值长度超过限制,报一下错误:

[Err] 1260 - Row 20 was cut by GROUP_CONCAT()

网上查找资料后发现,原来GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉,你可以通过下面的语句获得

mysql> SELECT @@global.group_concat_max_len;
+-------------------------------+
| @@global.group_concat_max_len |
+-------------------------------+
|                      1024     |
+-------------------------------+

1024这就是一般MySQL系统默认的最大长度,如果你的bid串起来大于这个就会出问题,好在有解决的办法:

1、在MySQL配置文件中加上 

group_concat_max_len = 102400 #你要的最大长度

2、直接运行sql语句:

SET GLOBAL group_concat_max_len=102400;
 
//会话级
SET SESSION group_concat_max_len = 102400;

 

<think>嗯,用户让我分析这两个函数:Pure_PID和Single_Neuron_Network。首先,我需要理解这两个函数各自的功能以及它们之间的关系。 先看Pure_PID函数。看起来是一个标准的PID控制算法实现。参数包括P、I、D的系数,当前的误差cur_err,还有当前的比例cur_proportion。函数内部计算比例项、积分项和微分项,然后返回当前比例减去计算出的PID输出。不过这里可能有个疑问,为什么返回的是cur_proportion - proportion?通常PID输出是直接相加的,但这里可能应用在特定的控制场景,比如调整某个比例值,需要进一步确认。 接下来是Single_Neuron_Network函数。函数名里有“单神经元网络”,这应该是指一种基于神经元自适应调整PID参数的算法。参数中有三个指针P、I、D,可能用来更新PID的系数。函数内部维护了一个误差数组err,保存当前、上次和上上次的误差值。然后根据当前误差和输入,调整Kp、Ki、Kd的值,使用的是类似梯度下降的方法,学习率是lrP、lrI、lrD。然后对权重进行归一化,计算三个输入(比例、积分、微分分量),最后返回调整后的输出。 用户的需求可能是想了解这两个函数的原理和区别,或者如何结合使用。可能是在做自适应PID控制,用单神经元网络在线调整PID参数。需要解释两者的作用,以及单神经元网络如何优化PID参数。 接下来要注意用户提到的系统级指令,特别是LaTeX格式的应用,确保数学公式正确。比如PID的公式应该用行内公式,而单神经元的学习规则可能需要独立公式。 需要检查代码中的变量,比如_pid结构体中的accum和ek,是否在外部定义,但用户可能不需要关心这些细节,重点在于算法逻辑。另外,归一化权重部分,w_sum是三个系数的绝对值之和,确保权重总和为1,防止参数过大。 在解释时,要分步骤,先介绍每个函数的功能,再对比它们的不同,最后说明单神经元网络如何改进传统PID。可能还需要指出代码中可能的注意事项,比如学习率和增益因子的选择,误差数组的更新逻辑是否正确。 最后,确保回答结构清晰,用中文,符合用户的要求。可能用户是控制工程的学生或工程师,希望了解如何实现自适应PID控制,所以需要详细但易懂的解释,同时指出代码的关键部分和算法原理。</think>我将分步解释这两个函数的功能和实现原理: 一、传统PID控制函数 Pure_PID() $$ \text{控制量} = K_p \cdot e(t) + K_i \cdot \int e(t)dt + K_d \cdot \frac{de(t)}{dt} $$ 1. 函数参数解析: - P/I/D:PID系数(虽然代码实际使用结构体中的参数) - cur_err:当前误差值 $e(t)$ - cur_proportion:当前比例项(可能用于增量式PID) 2. 代码流程: ```c e = cur_err; // 当前误差 float ec = e - _pid.ek; // 微分项计算:e(k)-e(k-1) _pid.accum += e; // 积分项累加 proportion = _pid.Kp * e // 比例项 + _pid.Ki * _pid.accum // 积分项 + _pid.Kd * (e - _pid.ek); // 微分项 _pid.ek = e; // 保存当前误差 return cur_proportion - proportion; // 输出增量式控制量 ``` 二、单神经元自适应PID函数 Single_Neuron_Network() 基于神经网络的参数自整定算法,实现动态调整PID参数: 1. 神经元学习规则: $$ \Delta K_p = \eta_p \cdot e(k) \cdot u(k) \cdot x_p(k) $$ $$ \Delta K_i = \eta_i \cdot e(k) \cdot u(k) \cdot x_i(k) $$ $$ \Delta K_d = \eta_d \cdot e(k) \cdot u(k) \cdot x_d(k) $$ 2. 代码关键步骤: ```c // 误差队列更新(三阶差分) err[ERR_LAST_LAST] = err[ERR_LAST]; err[ERR_LAST] = err[ERR_CURRENT]; err[ERR_CURRENT] = cur_err; // 参数在线调整(带学习率lrP/lrI/lrD) _pid.Kp -= lrP * err[ERR_CURRENT] * cur_proportion * n_input[NER_P]; _pid.Ki -= lrI * err[ERR_CURRENT] * cur_proportion * n_input[NER_I]; _pid.Kd -= lrD * err[ERR_CURRENT] * cur_proportion * n_input[NER_D]; // 权值归一化(保证Σ|w|=1) float w_sum = fabs(_pid.Kp)+fabs(_pid.Ki)+fabs(_pid.Kd); float w[3] = {_pid.Kp/w_sum, _pid.Ki/w_sum, _pid.Kd/w_sum}; // 神经元输入构造 n_input[NER_P] = e(k) // 比例项 n_input[NER_I] = e(k)-e(k-1) // 积分项 n_input[NER_D] = e(k)-2e(k-1)+e(k-2) // 微分项(二阶差分) // 输出合成 return cur_proportion + gain_factor*(w_p*x_p + w_i*x_i + w_d*x_d); ``` 三、算法对比分析 | 特性 | Pure_PID | Single_Neuron_Network | |-----------------|-----------------------------------|-------------------------------------| | 参数调整 | 固定参数 | 在线自适应调整 | | 误差处理 | 一阶差分 | 三阶差分(包含历史误差记忆) | | 抗干扰能力 | 一般 | 通过增益因子gain_factor增强鲁棒性 | | 计算复杂度 | $O(1)$ | $O(n)$(需维护误差序列) | | 适用场景 | 稳态系统 | 时变、非线性系统 | 四、实现注意事项 1. 学习率选择:lrP/lrI/lrD需满足 $0 < \eta < 1$,通常取0.01-0.5 2. 增益因子:gain_factor影响收敛速度,过大易震荡 3. 初始参数:需设置合理的初始PID参数 4. 积分抗饱和:建议增加积分限幅机制 5. 归一化处理:防止权重过大导致数值不稳定 五、典型应用场景 1. 电机转速控制 2. 温度控制系统 3. 机器人轨迹跟踪 4. 无人机姿态控制 5. 化工过程控制 这两个函数体现了从经典PID控制到智能控制的演进,单神经元网络通过在线调整参数,能更好地适应复杂工况,但同时也增加了参数整定的难度。实际使用中常需要配合模糊控制或遗传算法进行参数优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值