MySQL 中的 CASE 强制列数据类型为 BIGINT 而不是 INT
Posted
技术标签:
【中文标题】MySQL 中的 CASE 强制列数据类型为 BIGINT 而不是 INT【英文标题】:CASE in MySQL forces column datatype to BIGINT instead of INT 【发布时间】:2015-03-10 13:31:15 【问题描述】:好吧,它宁愿是一件非常简单的事情,但我自己也弄不明白。
在 mysql 服务器的存储过程中尝试以下行时,它会将列数据类型转换或设置为 BIGINT 而不是预期的 INT
CASE `L`.`Code` WHEN 'ABCD' THEN 0 ELSE `XL`.`ID` END as XLID
神奇的是,如果我从中删除 0,它会按预期返回 INT 作为数据类型。所以这个 0 肯定是罪魁祸首,但我不明白为什么以及如何解决这个问题?我尝试使用 CAST,但它不允许将 INT 转换为 INT。
会很有帮助。
【问题讨论】:
试试:CASE `L`.`Code` WHEN 'ABCD' THEN CAST('0' AS UNSIGNED) ELSE `XL`.`ID` END AS XLID
@wchiquito:谢谢,但不,仍然是相同的 BIGINT :-(
可能是 MySQL Workbench 进行了转换。
@wchiquito:是的,我怀疑是一样的,现在正在调查它,但它仍然很奇怪。问题是,我在应用程序方面遇到了麻烦,除非我在 C# 中特别提到它为 Int64,否则它会给出 InvalidCastException。
检查:Connector returning Long instead of Int.
【参考方案1】:
以下技巧可以提供帮助:
DELIMITER //
CREATE FUNCTION `return_integer`(`number` INT UNSIGNED)
RETURNS INT UNSIGNED DETERMINISTIC
BEGIN
RETURN `number`;
END//
DELIMITER ;
SELECT
CASE `L`.`Code`
WHEN 'ABCD' THEN `return_integer`(0)
ELSE `L`.`ID`
END AS XLID
FROM `table_name` `L`;
【讨论】:
以上是关于MySQL 中的 CASE 强制列数据类型为 BIGINT 而不是 INT的主要内容,如果未能解决你的问题,请参考以下文章