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

前言

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

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

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

select length(remark) from t_card order by length(remark) desc limit 10;

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

官方文档

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

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

跳转后可以看到一个函数表格,包括了接近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问题,旨在记录和鞭策自身建立一种健康的学习方式,主动探究问题,而不只是简单地获取他人的解决方案。

0 条评论
请不要发布违法违规有害信息,如发现请及时举报或反馈
还没有人评论呢,速度抢占沙发!
相关文章
  • Mysql的介绍 【1】MySQL是一个轻量级关系型数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,就增加了速度并提高了灵活性。 【2】sql语言分类: 名称 解释 命...

  • 迭代器的功能: 提供一种统一的方式,来透明的遍历容器 理解 begin()方法,end()方法, ++ , * 的用处 其中 C++11 中提供的foreach的方式,其底层还是通过迭代器来进行遍历的...

  • 存储引擎 一. MySQL体系结构 MySQL Server 连接层:连接的处理、认证授权、安全方案、检查是否超过最大连接数等。 服务层:SQL接口、解析器、查询优化器、缓存 引擎层:引擎是数据...

  • 使用子查询 子查询 查询(query) 任何SQL语句都是查询。但此术语一般指SELECT语句。 SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询。 利用子查询进行过滤 SELEC...

  • 1 mysql 报错解决mysql> grant all on *.* to "dba"@"%" identified by "mysql123";ERROR 1819 (HY000): Your p...

  • 1.什么是MySQL主从同步?        “主”指的是MySQL主服务器(master),负责写请求。“从”指的是MySQL从服务器(slave),负责读请求。主从同步指的是将主服务器上的数据同步...

  • 内容概要 存储数据的演变史 数据库软件应用史 MySQL简介 MySQL下载及安装 MySQL配置 存储数据的演变史 1.文本文件: 文件路径不固定,并且数据格式不统一 2.软件开发目录规范: ...

  • 1. KMP算法简介 温馨提示:在通篇阅读完并理解后再看简介效果更佳 以下简介由百度百科提供https://baike.baidu.com/item/KMP%E7%AE%97%E6%B3%95/109...

  • 前言 记得在360实习的时候,听到过一句话,大部分的安全问题并不是黑客造成的,而是内部人员。 epbf可以避免代码侵入,像桩子一样监控应用,同时也带来了一些安全问题。 下面简单演示一下如何利用bpft...

  • 使用MySQL插入数据时,可以根据需求场景选择合适的插入语句,例如当数据重复时如何插入数据,如何从另一个表导入数据,如何批量插入数据等场景。本文通过给出每个使用场景下的实例来说明数据插入的实现过程和方...

  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 作者: KAiTO 文章来源:GreatSQL社区原...

  • @ 一、拆分查询 将大查询拆分成小查询,每个查询功能完全一样,只是一小部分,每次只返回一小部分查询结果。 比如在删除旧数据的时候,如果用一个大的语句一次性删的话,则可能需要一次性锁住很多数据、占满整个...

  • 多表查询、Navicat软件、PyMySQL模块 一、多表查询的两种方法 1.准备工作 1.创建数据库 create databases db4 2.使用数据库 use db4 3.表数据准备 cre...

  • 1、简介   用rust写的一个简单的练手的demo,一个字符串时钟,在终端用字符串方式显示当前时间。本质是对图片取灰度,然后每个像素按灰度门限用星号代替灰度值,就把图片变为由星号组成的字符型图案。把...

  • MySQL MTR(MySQL Test Run)是 MySQL 数据库测试框架,用于自动化测试 MySQL 数据库系统的功能和性能。MTR 由 MySQL 官方提供,包含了大量的测试用例,可以对 M...

  • 作者:京东健康 孟飞 1、 数据库性能优化的意义 业务发展初期,数据库中量一般都不高,也不太容易出一些性能问题或者出的问题也不大,但是当数据库的量级达到一定规模之后,如果缺失有效的预警、监控、处理等手...

  • 📒博客主页: 开心档博客主页 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由开心档原创! 📆51CTO首发时间:🌴2022年12月12日🌴 ✉️这世界...

  • 一、相关知识JDK String的实现 字符串在JDK 8及JDK 9之后的实现有很大不同的。JDK 8中,String的结构是这样的: 1.1 String JDK 8的实现...

  • JZ38 字符串的排列 描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串AB...

  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 作者: Yejinrong/叶金荣 文章来源:Gr...