MySQL CONVERT() 函数使用指南
MySQL CONVERT()
函数将任意类型的参数值转为指定的类型或者字符集。
CONVERT()
语法
这里是 MySQL CONVERT()
函数的语法:
CONVERT(expr, data_type)
或
CONVERT(expr USING charset)
CONVERT(expr, data_type)
等同于 CAST(expr AS data_type)
。
参数
-
expr
必需的。 一个需要转换数据类型的值。
-
data_type
必需的。 目标数据类型。您可以使用下面的类型:
-
BINARY[(N)]
: 如果参数为空(0 长度),结果是BINARY(0)
,否则结果是VARBINARY
类型的字符串。 -
CHAR[(N)]
: 结果是VARCHAR
类型的字符串。除非参数为空,结果是CHAR(0)
。 -
DATE
: 结果是DATE
类型的。 -
DATETIME[(M)]
: 结果是DATETIME
类型的,M
是小数秒的位数。 -
DECIMAL[(M[,D])]
: 结果是DECIMAL
类型的。 -
DOUBLE
: 结果是DOUBLE
类型的。它在 MySQL 8.0.17 添加。 -
FLOAT[(p)]
: 按如下规则转换数据类型- 如果没有指定
p
,结果是FLOAT
类型的。 - 如果
0 <= p <= 24
,结果是FLOAT
类型的。 - 如果
25 <= p <= 53
,结果是DOUBLE
类型的。 - 如果
p < 0
或p > 53
,返回一个错误。
- 如果没有指定
-
JSON
: 结果是JSON
类型的。 -
NCHAR[(N)]
: 结果是NCHAR
类型的。 -
REAL
: 结果是REAL
类型的。实际上,如果启用了REAL_AS_FLOAT
它是FLOAT
,否则是DOUBLE
。 -
SIGNED [INTEGER]
: 结果是一个有符号的BIGINT
类型。 -
TIME[(M)]
: 结果是TIME
类型的,M
是小数秒的位数。 -
UNSIGNED [INTEGER]
: 结果是一个无符号的BIGINT
类型。 -
YEAR
: 结果是YEAR
类型的,它在 MySQL 8.0.22 添加。
-
-
charset
必需的。 要转换为的字符集。
返回值
MySQL CONVERT()
函数将任意类型的参数值转为指定的类型或者字符集并返回。
CONVERT()
示例
这里有几个 CONVERT()
的常用示例。
转为二进制
您可以是用 CONVERT()
函数将一个字符串转为二进制字符串。
SELECT CONVERT('hello', BINARY);
+----------------------------------------------------+
| CONVERT('hello', BINARY) |
+----------------------------------------------------+
| 0x68656C6C6F |
+----------------------------------------------------+
注意, 在 mysql client 中,二进制字符串默认以十六进制的形式打印出来。
您也可以使用 BINARY
操作符获取一个字符串的二进制字符串。如下:
SELECT BINARY 'hello';
+--------------------------------+
| BINARY 'hello' |
+--------------------------------+
| 0x68656C6C6F |
+--------------------------------+
转为 JSON
您可以使用 CONVERT()
函数将使用字符串表示的 JSON 文档转为 JSON 类型的数据。
SELECT CONVERT('[1, 2, "a"]', JSON);
+------------------------------+
| CONVERT('[1, 2, "a"]', JSON) |
+------------------------------+
| [1, 2, "a"] |
+------------------------------+
转为日期时间
您可以使用 CONVERT()
函数将使用字符串表示的日期/时间值转为 DATE, DATETIME 类型的数据。
SELECT
CONVERT('2022-02-28', DATE),
CONVERT('10:10:10', TIME),
CONVERT('2022-02-28 10:10:10', DATETIME);
+-----------------------------+---------------------------+------------------------------------------+
| CONVERT('2022-02-28', DATE) | CONVERT('10:10:10', TIME) | CONVERT('2022-02-28 10:10:10', DATETIME) |
+-----------------------------+---------------------------+------------------------------------------+
| 2022-02-28 | 10:10:10 | 2022-02-28 10:10:10 |
+-----------------------------+---------------------------+------------------------------------------+
转换字符集
本示例将 Hello
的字符集改为 latin1
字符集:
SELECT CONVERT("Hello" USING latin1);
+-------------------------------+
| CONVERT("Hello" USING latin1) |
+-------------------------------+
| Hello |
+-------------------------------+
如果采用的字符集不能表示相应的字符串,则会出现乱码。比如:
SELECT
CONVERT("好" USING latin1),
CONVERT("好" USING utf8mb4);
+-----------------------------+------------------------------+
| CONVERT("好" USING latin1) | CONVERT("好" USING utf8mb4) |
+-----------------------------+------------------------------+
| ? | 好 |
+-----------------------------+------------------------------+
这里,由于这个字符 好
超出了 latin1
的范围,因此输出了乱码。而转为 utf8mb4
则正常输出。