我已经使用true或false在mysql的bit(1)列中存储了0和1,但现在根据要求,我需要使用java在mysql的bit(2)列中存储0,1,2,3。我该怎么做呢?
发布于 2020-07-19 03:44:18
下面是如何使用BIT(2)列。首先,我们将创建该表:
CREATE TABLE rangeexample(
val BIT(2) NOT NULL
);现在我们需要在其中插入一些数据。我将插入0,1,2和3的二进制表示:
INSERT INTO rangeexample(val)
VALUES(b'00'),(b'01'),(b'10'),(b'11');如果您直接插入整数(MySQL/MariaDB会自动将它们转换为位),它也会起作用:
INSERT INTO rangeexample(val)
VALUES(0),(1),(2),(3);唯一的问题是读取数据。您将其存储为位(2),因此,如果您希望将它们作为整数读取,则必须将它们显式转换为INT,如下所示:
SELECT CAST(val AS INT) AS intval
FROM rangeexample;如果将"intval“创建为虚拟列,则可以解决此问题:
CREATE TABLE rangeexample(
val BIT(2) NOT NULL,
intval TINYINT GENERATED ALWAYS AS (CAST(val AS INT)) VIRTUAL
);这样你就可以这样做了:
SELECT intval
FROM rangeexample;这样,您就不必总是在SELECT查询中编写CAST函数。虚拟列不会浪费磁盘空间(它类似于视图,但它内置在表本身中,如果我可以这样比喻的话)。
另一种解决方案是使用整数数据类型,而TINYINT是最接近您的值范围的候选数据类型。可以这样做:
CREATE TABLE rangeexample(
val TINYINT NOT NULL,
CONSTRAINT val_range CHECK(val>=0 AND val<=3)
);这个解决方案会浪费一些磁盘空间,因为TINYINT使用的位数比实际使用的位数多;但是,通常这样更方便,所以大多数人更喜欢它。
https://stackoverflow.com/questions/62972222
复制相似问题