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的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据类型和常用字段属性总结

MySQL数据类型和常用字段属性总结

MySQL数据类型和常用字段属性总结

mysql数据类型转换

MySQL字段属性介绍

使用 case 语句根据不同表中的数据显示数据