首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用java在mysql中存储位值0、1、2、3

如何使用java在mysql中存储位值0、1、2、3
EN

Stack Overflow用户
提问于 2020-07-19 02:19:57
回答 1查看 495关注 0票数 0

我已经使用true或false在mysql的bit(1)列中存储了0和1,但现在根据要求,我需要使用java在mysql的bit(2)列中存储0,1,2,3。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2020-07-19 03:44:18

下面是如何使用BIT(2)列。首先,我们将创建该表:

代码语言:javascript
复制
CREATE TABLE rangeexample(
  val BIT(2) NOT NULL
);

现在我们需要在其中插入一些数据。我将插入0,1,2和3的二进制表示:

代码语言:javascript
复制
INSERT INTO rangeexample(val)
VALUES(b'00'),(b'01'),(b'10'),(b'11');

如果您直接插入整数(MySQL/MariaDB会自动将它们转换为位),它也会起作用:

代码语言:javascript
复制
INSERT INTO rangeexample(val)
VALUES(0),(1),(2),(3);

唯一的问题是读取数据。您将其存储为位(2),因此,如果您希望将它们作为整数读取,则必须将它们显式转换为INT,如下所示:

代码语言:javascript
复制
SELECT CAST(val AS INT) AS intval 
FROM rangeexample;

如果将"intval“创建为虚拟列,则可以解决此问题:

代码语言:javascript
复制
CREATE TABLE rangeexample(
  val BIT(2) NOT NULL,
  intval TINYINT GENERATED ALWAYS AS (CAST(val AS INT)) VIRTUAL
);

这样你就可以这样做了:

代码语言:javascript
复制
SELECT intval
FROM rangeexample;

这样,您就不必总是在SELECT查询中编写CAST函数。虚拟列不会浪费磁盘空间(它类似于视图,但它内置在表本身中,如果我可以这样比喻的话)。

另一种解决方案是使用整数数据类型,而TINYINT是最接近您的值范围的候选数据类型。可以这样做:

代码语言:javascript
复制
CREATE TABLE rangeexample(
  val TINYINT NOT NULL,
  CONSTRAINT val_range CHECK(val>=0 AND val<=3)
);

这个解决方案会浪费一些磁盘空间,因为TINYINT使用的位数比实际使用的位数多;但是,通常这样更方便,所以大多数人更喜欢它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62972222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档