今天在数据导出给业务方的时候,业务方一直提示我导出的某一个字段长度超过他们规定的长度
执行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
此处
current
和bak
都表示具体数据库名称,可选 - 然后对其字段做小规模截取
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() | 返回字符串的长度(以字节为单位) |