0


MySQL如何正确查询字符串长度

前言

笔者最近有一个需求,需要将一段文字插入到备注字段

remark

前面。

由于担心插入后超过字段长度的限制,所以需要统计线上数据,根据长度倒序查询

remark

最长的一批数据看看长度。

刚开始百度了一下 MySQL如何查看字段长度,看到了length(),于是就写了这条sql:

select length(remark)from t_card orderby length(remark)desclimit10;

这个字段类型是

varchar(512)

,而查出来的10条数据基本都大于512,给我整懵了,当时就怀疑这个函数返回的不是字符数量,于是决定探究一下MySQL如何获取字符串长度。

官方文档

既然网上答案参差不齐,不如就去找找权威的官方文档。
进入MySQL文档首页 https://dev.mysql.com/doc/ ,选择下方的参考手册,根据版本笔者选择了

MySQL 5.7 Reference Manual


image

进入手册后,因为我们要查询字符串的函数,所以左侧目录选择

String Functions and Operators


image

跳转后可以看到一个函数表格,包括了接近60个字符串函数,我们需要查询字符串长度的函数,使用

CTRL + F

查找关键词

length

,大致筛选出以下5个函数:
函数名解释原文翻译BIT_LENGTH()Return length of argument in bits返回参数的bit数CHAR_LENGTH()Return number of characters in argument返回参数中的字符数CHARACTER_LENGTH()Synonym for CHAR_LENGTH()CHAR_LENGTH()的同义词LENGTH()Return the length of a string in bytes返回字符串的长度(以字节为单位)OCTET_LENGTH()Synonym for LENGTH()LENGTH()的同义词
我们可以看到这些函数返回值的单位有bit、字节、字符数,弄清楚单位之间的转换关系就能更好的理解查询结果的含义。
我们知道字节是计算机最小的存储单位,1字节等于8 bit,那么存储1个字符需要用到多少字节呢?这个和使用的编码集有关,查询手册

https://dev.mysql.com/doc/refman/5.7/en/charset-unicode.html

,以我们最常用的

UTF-8

为例:

  1. 字母、数字和标点符号:1字节
  2. 大多数欧洲和中东文字:2字节
  3. 韩语、中文和日语文字:3字节或4字节

看到这里,最开始的疑惑就能解开了,

varchar

设置的是字符数量,而笔者sql中使用的是

LENGTH()

,查询的是字符串的字节数,而备注基本都是中文,结果就大概是字符数的两到三倍。

结论

笔者的核心需求是获取字符串长度,所以这里应该使用

CHAR_LENGTH() 

或者同义函数

CHARACTER_LENGTH()

后语

本文通过查阅官方文档解决一个简单的MySQL问题,旨在记录和鞭策自身建立一种健康的学习方式,主动探究问题,而不只是简单地获取他人的解决方案。

标签: mysql 数据库 java

本文转载自: https://blog.csdn.net/weixin_43549148/article/details/129654175
版权归原作者 midasism 所有, 如有侵权,请联系我们删除。

“MySQL如何正确查询字符串长度”的评论:

还没有评论