MySQL CONVERT函数用法详解:字符集与数据类型转换
掌握 MySQL CONVERT 函数的正确姿势,轻松应对字符集修改与复杂数据类型转换。
一、转换指定字符集
在使用 MySQL 的过程中,有时需要将字符串从一种字符集转换为另一种字符集(例如从 utf8mb4 转为 gbk)。此时可以使用带有 USING 子句的 CONVERT 函数。
第1步:编写字符集转换语句
目的:将字符串 expr 的字符集转换为 transcoding_name 指定的字符集。
入口/方法:使用 SELECT 语句执行转换。
动作:在 CONVERT(expr USING transcoding_name) 结构中填入对应的值。
重要参数:
expr:需要转换字符集的原始字符串或字段。transcoding_name:目标字符集名称(如utf8,gbk等)。
-- 查看默认字符集为 utf8mb4
SELECT CHARSET('ABC');
-- 将其转换为 gbk 字符集
SELECT CHARSET(CONVERT('ABC' USING gbk));二、转换指定数据类型
CONVERT 函数的另一大常用场景是进行数据类型的显式转换。这种用法更接近于其他数据库的 CAST 函数,但在 MySQL 中同样高效。其语法结构如下:
CONVERT(expr,type)
说明:
expr:要转换的值(可以是字符串、数字或其他表达式)。type:目标数据类型,支持多种取值。
支持的类型参数及描述:
| 类型 (type) | 描述 |
|---|---|
DATE |
将 expr 转换成 'YYYY-MM-DD' 格式的日期 |
DATETIME |
将 expr 转换成 'YYYY-MM-DD HH:MM:SS' 格式的时间点 |
TIME |
将 expr 转换成 'HH:MM:SS' 格式的时间差或具体时间 |
CHAR |
将 expr 转换成固定长度的字符串 (CHAR) 格式 |
SIGNED |
将 expr 转换成有符号整数 (INT) 格式 |
UNSIGNED |
将 expr 转换成无符号整数 (INT) 格式 |
DECIMAL |
将 expr 转换成浮点数格式 (DECIMAL),可指定精度与小数位数 |
BINARY |
将 expr 转换成二进制格式 |
第2步:验证各类数据转换效果
目的:通过具体 SQL 样例,观察不同数据类型转换后的实际结果,避免格式错误。
动作:分别针对 DATE、DATETIME、TIME、字符串、数值等不同场景调用函数。
1. 日期与时间转换
-- 字符串转 DATE 类型,结果为 '2022-05-25'
SELECT CONVERT('2022-05-25', DATE);
-- 获取当前完整时间戳
SELECT NOW(); -- 假设输出 '2022-05-25 17:58:48'
-- 仅提取日期部分
SELECT CONVERT(NOW(), DATE); -- 结果为 '2022-05-25'-- 字符串转 DATETIME 类型,自动补全时间为 00:00:00
SELECT CONVERT('2022-05-25', DATETIME); -- 结果 '2022-05-25 00:00:00'-- 字符串转 TIME 类型
SELECT CONVERT('14:06:10', TIME); -- 结果 '14:06:10'
-- 当前时间转 TIME 类型,仅保留时:分:秒
SELECT CONVERT(NOW(), TIME); -- 示例结果 '17:25:12'2. 字符串处理
-- 数字转 CHAR 类型,便于字符串拼接
SELECT CONVERT(150, CHAR); -- 结果 '150'
-- 错误示范:直接将数字与字符串 CONCAT 可能报错或不兼容
-- SELECT CONCAT('Hello World', 437);
-- 正确做法:先 CONVERT 再 CONCAT
SELECT CONCAT('Hello World', CONVERT(437, CHAR)); -- 结果 'Hello World437'3. 数值精度转换 (SIGNED / UNSIGNED / DECIMAL)
-- SIGNED:有符号整数转换(截断小数位)
SELECT CONVERT('5.0', SIGNED); -- 结果 5
SELECT CONVERT(6.4, SIGNED); -- 结果 6
SELECT CONVERT(-6.5, SIGNED); -- 结果 -7 (四舍五入规则在不同版本可能略有差异,通常取整)
-- UNSIGNED:无符号整数转换
SELECT CONVERT(6.4, UNSIGNED); -- 结果 6
SELECT CONVERT(-6.4, UNSIGNED); -- 结果 0 (负数转为无符号数会溢出变0)-- DECIMAL:高精度小数转换,需注意定义总位数(precision)和小数位(scale)
-- DECIMAL(10,2)表示总共10位,其中小数点后占2位
SELECT CONVERT('9.5', DECIMAL(10,2)); -- 结果 9.50
SELECT CONVERT('1234567890.123', DECIMAL(10,2)); -- 超过精度限制,结果可能被截断
SELECT CONVERT('220.23211231', DECIMAL(10,3)); -- 结果 220.232 (保留3位小数)三、注意事项与替代方案
虽然 CONVERT 功能强大,但需要注意的是,在处理数据类型转换时,MySQL 的标准做法推荐使用 CAST(value AS type) 函数。两者的效果在很多情况下是一致的,例如:SELECT CAST('123' AS SIGNED)。
核心区别建议:
- 若涉及字符集编码转换,必须使用
CONVERT(... USING ...)语法。 - 若仅涉及数据类型转换,建议使用更具通用标准的
CAST函数,或者根据代码习惯统一使用CONVERT,两者均有效。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













