MySQL CONVERT() Function
In MySQL, the CONVERT() function converts the parameter value of any type to the specified type or character set.
CONVERT() Syntax
Here is the syntax of the MySQL CONVERT() function:
CONVERT(expr, data_type)
or
CONVERT(expr USING charset)
CONVERT(expr, data_type) is equivalent to CAST(expr AS data_type).
Parameters
-
exprRequired. The value to be converted.
-
data_typeRequired. The target data type. You can use the following types:
-
BINARY[(N)]: If the argument is empty (zero length), the result is ofBINARY(0)data type, otherwise the result is a string ofVARBINARYdata type. -
CHAR[(N)]: The result is a string ofVARCHARdata type. Unless the argument is empty, the result isCHAR(0)data type. -
DATE: The result is ofDATEdata type. -
DATETIME[(M)]: The result is ofDATETIMEdata type andMis the number of fractional seconds. -
DECIMAL[(M[,D])]: The result is ofDECIMALdata type. -
DOUBLE: The result is ofDOUBLEdata type. It was added in MySQL 8.0.17. -
FLOAT[(p)]: Convert the data according to the following rules- If not specified
p, the result is ofFLOATdata type. - If
0 <= p <= 24, the result is ofFLOATdata type. - If
25 <= p <= 53, the result is ofDOUBLEdata type. - If
p < 0orp > 53, return an error.
- If not specified
-
JSON: The result is ofJSONdata type. -
NCHAR[(N)]: The result is ofNCHARdata type. -
REAL: The result is ofREALdata type. Actually, it isFLOATifREAL_AS_FLOATenabled, otherwise it isDOUBLE. -
SIGNED [INTEGER]: The result is a signedBIGINTdata type. -
TIME[(M)]: The result is ofTIMEdata type andMis the number of fractional seconds. -
UNSIGNED [INTEGER]: The result is an unsignedBIGINTdata type. -
YEAR: The result is ofYEARdata type, which was added in MySQL 8.0.22.
-
-
charsetRequired. The character set to convert to.
Return value
The MySQL CONVERT() function converts the parameter value of any type to the specified type or character set and returns the result.
CONVERT() Examples
Here are some examples of CONVERT().
Convert to binary
You can use the CONVERT() function to convert a regular string to a binary string.
SELECT CONVERT('hello', BINARY);
+----------------------------------------------------+
| CONVERT('hello', BINARY) |
+----------------------------------------------------+
| 0x68656C6C6F |
+----------------------------------------------------+Note that in the mysql client, binary strings are printed in hexadecimal by default.
You can also use the BINARY operator to get the binary string of a string as follow:
SELECT BINARY 'hello';
+--------------------------------+
| BINARY 'hello' |
+--------------------------------+
| 0x68656C6C6F |
+--------------------------------+Convert to JSON
You can use the CONVERT() function to convert a JSON document represented as a string to value of JSON data type.
SELECT CONVERT('[1, 2, "a"]', JSON);
+------------------------------+
| CONVERT('[1, 2, "a"]', JSON) |
+------------------------------+
| [1, 2, "a"] |
+------------------------------+Convert to datetime
You can use the CONVERT() function to convert date/time values represented by strings to data of DATE, DATETIME type.
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 |
+-----------------------------+---------------------------+------------------------------------------+Convert character set
This example changes the character set of Hello to the character set latin1:
SELECT CONVERT("Hello" USING latin1);
+-------------------------------+
| CONVERT("Hello" USING latin1) |
+-------------------------------+
| Hello |
+-------------------------------+If the character set used cannot represent the string, there will be some garbled characters in the result. For example:
SELECT
CONVERT("好" USING latin1),
CONVERT("好" USING utf8mb4);
+-----------------------------+------------------------------+
| CONVERT("好" USING latin1) | CONVERT("好" USING utf8mb4) |
+-----------------------------+------------------------------+
| ? | 好 |
+-----------------------------+------------------------------+Here, since the character 好 is outside the range of latin1, there is a garbled character ? in output. And converting to utf8mb4 is correct.