搜 convert() 函数,会跳出一大堆文档:SQL Server 的、MySQL 的、Python 图像库的、还有 C++ 标准库里的字符串转换。它们名字一样,用途完全不同。所以第一件事是确认语言和库,否则抄来的示例一定跑不通。

一、SQL 里的 convert

SQL Server 的写法最常见,作用是类型转换并指定格式:

SELECT CONVERT(varchar(10), GETDATE(), 120);   -- 2026-10-21
SELECT CONVERT(int, '123');

第一个参数是目标类型,第二个是原值,第三个可选参数是样式码,只对日期和货币有意义。120 表示 yyyy-mm-dd hh:mi:ss 格式,111 是 yyyy/mm/dd。

MySQL 里同名函数的参数顺序正好相反,是 CONVERT(值, 类型):

SELECT CONVERT('2026-10-21', DATE);
SELECT CONVERT('hello' USING utf8mb4);

把 SQL Server 的写法直接搬到 MySQL,必然语法错误,这是跨库迁移最常见的坑。

二、C++ 标准库里的 std::convert

C++20 之前没有这个名字,常见的 convert 多是项目里自己封装的大小写转换或者编码转换函数。看到用 std::convert 的代码,先查它 include 的是哪个头文件。

三、Python 里的 convert

PIL(Pillow)图像库有 Image.convert(),用来转换色彩模式:

from PIL import Image
img = Image.open('a.jpg').convert('L')   # 转灰度
img.save('gray.png')

这里用法是对象方法,参数是目标模式,L 表示灰度,RGB 表示彩色,CMYK 用于印刷。做图像预处理时,先统一转成 RGB 再送进模型,能避免通道数不一致的报错。

四、字符集转换

很多项目的工具函数里,convert 其实是编码转换,把 GBK 转 UTF-8。这类函数通常基于 iconv 或者语言自带的编码库,参数顺序是源编码、目标编码。

怎么判断自己遇到的是哪一种

  • 看报错信息:报 syntax error 是 SQL 写法不对,报 undefined 是函数没导入。
  • 看参数个数:两个参数是类型转换,三个参数带样式码,多半是 SQL Server。
  • 看上下文:在查询里就是数据库函数,在图像处理里就是色彩模式。

结论很简单:convert 没有统一的定义,确认语言和库之后,照着那一家的文档看参数顺序就够了。