在 MariaDB 中使用条件视图中的 Bit(1) 返回 48/49

问题描述 投票:0回答:1

我正在尝试创建一个在 MariaDB 中显示为

BIT(1)
类型的视图。我尝试了这个答案并执行了以下操作:

CREATE FUNCTION CastToBit(N INT) RETURNS bit(1)
BEGIN
    RETURN N;
END

问题是,每当我尝试有条件地使用它时,由于某种原因它总是返回 48 + 预期的值。

SELECT 
    IF(FALSE, CastToBit(1), CastToBit(0)) AS `false`, 
    IF(TRUE, CastToBit(1), CastToBit(0)) AS `true`

不知何故,这返回:

真实
48 49

即使

BIT(1)
根本无法存储48和49!

如果我删除条件,它就会起作用:

SELECT CastToBit(0) AS `false`, CastToBit(1) AS `true`
真实
0 1

我也尝试过使用

CASE / ELSE
,但没有成功。

如何在条件语句中显示正确的数字?

casting mariadb
1个回答
0
投票

Myriadb,在您的情况下自动转换为“最佳”类型 ascii

因此要使其无效,您需要再次转换

但我无法理解你的功能的必要性

CREATE FUNCTION CastToBit(N INT) RETURNS bit(1)
BEGIN
    RETURN N;
END

SELECT 
    IF(FALSE, BIN(CastToBit(1)), BIN(CastToBit(0))) AS `false`, 
    IF(TRUE, BIN(CastToBit(1)), BIN(CastToBit(0))) AS `true`

真实
0 1

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.