SQL:MySQL函数:字符串函数
目录
为什么需要字符串函数?
1️⃣ LENGTH(str) — 这个字符串有几个“字节”?
2️⃣ CHAR_LENGTH(str) — 这个字符串有几个“字符”?
3️⃣ TRIM(str) — 把两边的空格剪掉
4️⃣ REPLACE(str, a, b) — 把 a 替换成 b
使用这些函数时的基本思维方法
为什么需要字符串函数?
我们用数据库存储信息,经常会处理 文字/文本(如:用户名、推文、商品名、评论内容)。但是这些文字往往:
-
太长、太短(需要裁剪)
-
多余空格(要去掉)
-
出现错别字/旧字段(要替换)
-
需要统计长度(做验证、展示控制)
👉 所以,字符串函数 = 数据库对“文本数据”的基础处理工具
就像洗衣机、剪刀、胶水,是处理文本的“工具箱”。
1️⃣ LENGTH(str) — 这个字符串有几个“字节”?
❓ 为什么需要它?
因为数据库底层不是存文字,而是存“编码”后的字节。不同字符(尤其中英文)所占空间不同!
⚙️ 它怎么做?
-
英文字符用 UTF-8 编码是 1 字节
-
中文字符一般是 3 字节
举例:
SELECT LENGTH('abc'); -- 输出 3
SELECT LENGTH('你好'); -- 输出 6(因为每个汉字占 3 个字节)
🧩 用途:
-
看数据占用多大空间
-
检查数据长度限制(如字段最大 255 字节)
2️⃣ CHAR_LENGTH(str) — 这个字符串有几个“字符”?
❓ 为什么有它?
有时候你不关心“字节数”,只关心“有几个字”!
比如用户输入姓名“你好”,你不在意占多少空间,只关心是不是 2 个字。
⚙️ 它怎么做?
直接按“字符数”来统计,不管每个字符占几个字节。
SELECT CHAR_LENGTH('abc'); -- 输出 3
SELECT CHAR_LENGTH('你好'); -- 输出 2
🧩 用途:
-
表单验证:用户名不能超过 10 个字符
-
用户界面:控制展示字符数
👉 通常我们说“长度”,都推荐用 CHAR_LENGTH
,而不是 LENGTH
3️⃣ TRIM(str) — 把两边的空格剪掉
❓ 为什么?
用户在输入时,可能不小心在两边加了空格,比如:
' John '
和 'John'
,你希望它们一样对待
⚙️ 它怎么做?
只删除字符串开头和结尾的空格,中间的空格不动。
SELECT TRIM(' abc '); -- 输出 'abc'
🧩 用途:
-
清洗用户输入
-
保证字符串比较不会因多余空格失败
4️⃣ REPLACE(str, a, b) — 把 a 替换成 b
❓ 为什么?
字符串中可能有老词、错词、标记符号,要换掉:
比如把 “https” 替换为 “http”,或者把“坏词”屏蔽成“**”。
⚙️ 它怎么做?
找到所有的 a,换成 b,返回一个新字符串,不改变原数据。
SELECT REPLACE('I love apple', 'apple', 'banana');
-- 输出 'I love banana'
🧩 用途:
-
替换敏感词
-
批量修复字符串中的错误
-
生成格式化内容
使用这些函数时的基本思维方法
✅ 1. 从“数据干净吗?”出发
👉 如果数据输入时可能有异常(空格、乱码、多余字符),用 TRIM, REPLACE 清洗
✅ 2. 从“你想要的是字节?还是字符?”出发
👉 对存储空间、限制字段大小 → 用 LENGTH
👉 对显示限制、统计文字长度 → 用 CHAR_LENGTH
✅ 3. 从“原数据要不要动?”出发
这些函数大多数是不修改原数据,只返回新结果。
如果你想永久修改列数据,要配合 UPDATE