【问题标题】:CASE in MySQL forces column datatype to BIGINT instead of INTMySQL 中的 CASE 强制列数据类型为 BIGINT 而不是 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。

标签: mysql amazon-web-services mysql-workbench


【解决方案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`;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 2011-03-09
    • 2021-03-04
    • 2011-07-12
    • 2012-07-26
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多