从JavaSpringBootMapmysql数据库中的tinyint(3)

ruoxqz4g  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(458)

我正在使用一个遗留的代码库重构一个sms网关,该网关包含一个名为“delivery\u status”的tinyint(3)列,该列位于mysql数据库的“m\u outbound\u messages”表中。此列根据以下枚举记录提交到sms网关的消息的状态:

public enum SmsMessageStatusType {
    INVALID(0, "smsMessageStatusType.invalid"), // unknown status type
    PENDING(100, "smsMessageStatusType.pending"), // message received
    WAITING_FOR_REPORT(150, "smsMessageStatusType.pending"),
    SENT(200, "smsMessageStatusType.sent"), // message sent to the SMS gateway
    DELIVERED(300, "smsMessageStatusType.delivered"), // SMS gateway's attempt to deliver message to recipient's phone was successful
    FAILED(400, "smsMessageStatusType.failed"); // SMS gateway's attempt to deliver message to recipient's phone failed
}

在遗留代码库中,delivery\u status字段已Map到@entity类中“m\u outbound\u messages”表的整数数据类型。但是,当我通过将smsmessagentastustype.failed.getvalue()作为整数传递来更改数据库中特定行的delivery\u status列的状态时,会出现以下错误:

org.drizzle.jdbc.internal.common.QueryException: Out of range value for column 'delivery_status' at row 1

我还尝试将delivery\u状态声明为unsigned tinyint(3),但问题仍然存在。另外,当我将传递状态Map到布尔变量时,该值不是以枚举值所要求的格式存储的。
但是,默认情况下,数据库中的所有行都以smsmessagentastustype.pending值(100)作为其传递状态正确存储。
任何关于如何将tinyint(3)从javaMap成所需格式的指针都将受到赞赏。

eoxn13cs

eoxn13cs1#

mysql tinyint表示为单个字节,这意味着有符号字段的最大值为127,无符号字段的最大值为255。在任何一种情况下,这都小于您试图设置的值400。
另请参阅此答案,它阐明了 (3) 指示显示宽度,不影响可用于存储值的字节数。

相关问题