【问题标题】:Mapping tinyint(3) in a mysql database from Java Spring Boot从 Java Spring Boot 在 mysql 数据库中映射 tinyint(3)
【发布时间】:2018-06-21 21:55:40
【问题描述】:

我正在使用旧代码库重构 SMS 网关,该网关由 mysql 的 "m_outbound_messages" 表中名为 "delivery_status" 的 tinyint(3) 列组成数据库。该栏目根据以下枚举记录提交给短信网关的消息状态:

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_status 字段已映射到 "m_outbound_messages" 表的 @Entity 类中的整数数据类型。但是,当我通过将 SmsMessageStatusType.FAILED.getvalue() 作为整数传递来更改数据库中特定行的 delivery_status 列的状态时,我收到以下错误:

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

我也尝试将 delivery_status 声明为无符号 tinyint(3),但问题仍然存在。此外,当我将 delivery-status 映射到布尔变量时,该值并未以枚举值所需的格式存储。

但是,默认情况下,数据库中的所有行都以 SmsMessageStatusType.Pending 值 (100) 作为它们的 delivery_status 正确存储。

任何关于如何以所需格式从 Java 映射 tinyint(3) 的指针将不胜感激。

【问题讨论】:

    标签: java mysql spring tinyint


    【解决方案1】:

    MySQL tinyint 是represented as a single byte,表示有符号字段的最大值为 127,无符号字段的最大值为 255。无论哪种情况,这都小于您尝试设置的值 400。

    另请参阅this answer,它阐明了(3) 指示显示宽度,并且不影响可用于存储值的字节数。

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2021-07-07
      • 2020-11-26
      • 2021-01-05
      • 2018-08-05
      • 1970-01-01
      相关资源
      最近更新 更多