我有这个(简化的)查询,它在MySQL(5.7.17)中不起作用:
SELECT a.*, CAST(NULL AS BLOB) AS fake_column FROM table1 a
我想要实现的是从数据库中选择一些真正的列,并为它们添加一个特定类型的常量列。
这在SQLite中正常工作,在MS-SQL Server中似乎也是正确的语法,如question中所述。
但在MySQL中,它失败了(只使用MySQL Workbench),错误代码为 1064(您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以获得正确的语法使用近...) 。实际上,所有这些都以同样的方式失败:
CAST(NULL AS BIGINT) AS fake_column
CAST(0 AS BIGINT) AS fake_column
CAST(999 AS BIGINT) AS fake_column
CAST(NULL AS SMALLINT) AS fake_column
CAST(0 AS SMALLINT) AS fake_column
CAST(999 AS SMALLINT) AS fake_column
CAST(NULL AS BIT) AS fake_column
CAST(0 AS BIT) AS fake_column
CAST(1 AS BIT) AS fake_column
MySQL支持标准的CAST和CONVERT函数,但是它们接受的类型似乎存在一些限制,或者我正在构建一个常量。使用字符串更好。例如,CAST到CHAR(500)可以工作。
是否有已知的解决方法?
我试图定义这个用户功能:
DELIMITER $$
CREATE FUNCTION null_blob RETURNS blob
BEGIN
RETURN NULL;
END$$
DELIMITER ;
但我仍然得到完全相同的错误代码1064。
答案 0 :(得分:1)
似乎没有方法可以投放到BIT
,BIGINT
或SMALLINT
,但您可以投放到SIGNED
或UNSIGNED
(我刚用MySQL 5.7.7测试过。
当您将这些常量添加到来自其他字段的实际数据时,MySQL应该在添加时自动将这些常量视为适当的数据类型。
答案 1 :(得分:0)