MySQL LEFT 字符截取需要注意的坑

今天在数据导出给业务方的时候,业务方一直提示我导出的某一个字段长度超过他们规定的长度

执行SQL语句如下:

update middle_data_content set `description` = LEFT(`description`,1000)

然后会发现:(具体字段LENGTH长度还是会有大于1000的情况)

SELECT LENGTH(`description`) FROM middle_data_content WHERE LENGTH(`description`)>1000

后面百思不得其解,最后用验证的方法来排查问题:

  • 先恢复之前修改过的数据,恢复之前最好先对你要修改的表或库做备份
    UPDATE  current.middle_data_content A, bak.middle_data_content_bak B SET A.description = B.description WHERE A.contentId = B.contentId
    

    此处 currentbak 都表示具体数据库名称,可选

  • 然后对其字段做小规模截取
    UPDATE middle_data_content set `description` = LEFT(`description`,100)
    
  • 再查看最大的其字段长度
    SELECT max(LENGTH(`description`)) FROM middle_data_content
    
  • 结果显示
    max(LENGTH(`description`))
    300
    

猜想:

LEFT(description,100) 是截取100个汉字或其他字符串数据
LENGTH(description) 是表示varchar 长度,1个汉字占数据库中3个varchar 字节

论证:

SELECT LEFT("一二三四五六七八九十", 5);
结果:一二三四五
SELECT LENGTH("一二三四五");
结果:15

官方说明: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

函数名称描述
LEFT()返回指定的最左边的字符数
LENGTH()返回字符串的长度(以字节为单位)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值