从 Java Spring 引导在 mysql 数据库中映射 tinyint(3)
Mapping tinyint(3) in a mysql database from Java Spring Boot
我正在使用遗留代码库重构 SMS 网关,该网关由 [=]"delivery_status" 中的 tinyint(3) 列组成 [= mysql 数据库中的 42=] table。此列根据以下枚举记录提交到 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_status 字段已映射到 [=25= 的 @Entity class 中的 Integer 数据类型]"m_outbound_messages"table。但是,当我通过将 SmsMessageStatusType.FAILED.getvalue() 作为整数传递来更改数据库中特定行的 delivery_status 列的状态时,出现以下错误:
org.drizzle.jdbc.internal.common.QueryException: Out of range value for column 'delivery_status' at row 1
我也曾尝试将 delivery_status 声明为 unsigned tinyint(3),但问题仍然存在。此外,当我将 delivery-status 映射到布尔变量时,该值未以枚举值所需的格式存储。
但是,默认情况下,数据库中的所有行都使用 SmsMessageStatusType.Pending 值 (100) 作为它们的 delivery_status 正确存储。
任何关于如何以所需格式从 Java 映射 tinyint(3) 的指针将不胜感激。
一个MySQL tinyint是represented as a single byte,意思是有符号字段的最大值是127,无符号字段的最大值是255。无论哪种情况,这都小于您尝试设置的值 400。
另请参阅 this answer,阐明 (3)
指示显示宽度,并且不影响可用于存储值的字节数。
我正在使用遗留代码库重构 SMS 网关,该网关由 [=]"delivery_status" 中的 tinyint(3) 列组成 [= mysql 数据库中的 42=] table。此列根据以下枚举记录提交到 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_status 字段已映射到 [=25= 的 @Entity class 中的 Integer 数据类型]"m_outbound_messages"table。但是,当我通过将 SmsMessageStatusType.FAILED.getvalue() 作为整数传递来更改数据库中特定行的 delivery_status 列的状态时,出现以下错误:
org.drizzle.jdbc.internal.common.QueryException: Out of range value for column 'delivery_status' at row 1
我也曾尝试将 delivery_status 声明为 unsigned tinyint(3),但问题仍然存在。此外,当我将 delivery-status 映射到布尔变量时,该值未以枚举值所需的格式存储。
但是,默认情况下,数据库中的所有行都使用 SmsMessageStatusType.Pending 值 (100) 作为它们的 delivery_status 正确存储。
任何关于如何以所需格式从 Java 映射 tinyint(3) 的指针将不胜感激。
一个MySQL tinyint是represented as a single byte,意思是有符号字段的最大值是127,无符号字段的最大值是255。无论哪种情况,这都小于您尝试设置的值 400。
另请参阅 this answer,阐明 (3)
指示显示宽度,并且不影响可用于存储值的字节数。