--GaussDB
m_db=# CREATE TABLE sub_query_table(myfloat float) DISTRIBUTE BY REPLICATION;
CREATE TABLE
m_db=# INSERT INTO sub_query_table(myfloat) VALUES (1.23);
INSERT 0 1
m_db=# SELECT binary(SELECT myfloat FROM sub_query_table) FROM sub_query_table;
binary
--------
1.23
(1 row)
m_db=# SELECT cast((SELECT myfloat FROM sub_query_table) AS char);
cast
------
1.23
(1 row)
--MySQL 5.7
mysql> CREATE TABLE sub_query_table(myfloat float);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO sub_query_table(myfloat) VALUES (1.23);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT binary(SELECT myfloat FROM sub_query_table) FROM sub_query_table;
+-----------------------------------------------+
| binary(SELECT myfloat FROM sub_query_table) |
+-----------------------------------------------+
| 1.2300000190734863 |
+-----------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT cast((SELECT myfloat FROM sub_query_table) AS char);
+------------------------------------------------------+
| cast((SELECT myfloat FROM sub_query_table) AS char) |
+------------------------------------------------------+
| 1.2300000190734863 |
+------------------------------------------------------+
1 row in set (0.00 sec)
当使用CAST(expr as CHAR[(p)])时,MySQL支持指定字符集,GaussDB 不支持。
-- GaussDB
m_db=# SELECT CAST('hello' AS CHAR CHARACTER SET utf8);
ERROR: syntax error at or near "CHARACTER"
LINE 1: SELECT CAST('hello' AS CHAR CHARACTER SET utf8);
^
-- Mysql 5.7
mysql> SELECT CAST('hello' AS CHAR CHARACTER SET utf8);
+------------------------------------------+
| CAST('hello' AS CHAR CHARACTER SET utf8) |
+------------------------------------------+
| hello |
+------------------------------------------+
1 row in set (0.00 sec)
当使用CAST(expr as CHAR[(p)]),返回结果为非法字符时,MySQL 5.7及GaussDB直接返回非法字符,MySQL 8.0在宽松模式下返回截断后的字段串,严格模式下返回NULL。