MySQL CONVERT函数用法详解:字符集与数据类型转换

顾星河
顾星河
发布时间:2026-10-15 | 4人浏览过
原创

掌握 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,两者均有效。
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表