mysql保存数据提示:Out of range value for column错误

博客指出MySQL出现传入参数超出数据库字段设置最大值的错误,解决办法是在数据库中修改。还提及了MySQL基本数据类型里几个int的长度情况。

错误原因:传入参数超出数据库字段设置最大值 在数据库中修改即可

mysql的基本数据类型里几个int长度如下:

类型大小范围(有符号)范围(无符号)用途
TINYINT1字节(-128,127)(0,255)小整数值
SMALLINT2字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
`com.mysql.cj.jdbc.exceptions.MysqlDataTruncation` 异常表示数据截断,当插入或更新的数据超出了数据库列定义的范围时会出现该异常。结合提供的参考信息,以下是一些可能的解决方法: ### 检查参数顺序 在使用 JDBC 执行 SQL 语句时,要确保传入的参数顺序与 SQL 语句中所需参数的顺序一致。例如,如果 SQL 语句需要 `password` 和 `admin_id` 两个参数,传入的参数顺序也必须是 `password` 和 `admin_id`,否则可能会导致数据类型不匹配,进而引发数据截断异常[^1]。 ### 检查插入数据的格式 确保插入的数据格式与数据库列定义的格式一致。例如,如果数据库列定义为 `timestamp` 类型,插入时不能随便写一个不符合该类型的值,如 `1`,而应插入符合 `timestamp` 格式的数据。若插入的数据不符合列定义的格式,会导致数据截断异常,此时可将不符合格式的数据删除[^2]。 ### 检查字符编码 如果涉及到中文等非 ASCII 字符,要确保数据传输过程中的编码设置正确。因为 POST 请求的默认编码是 `ios-8859-1`,无法识别中文,可能会导致数据传输过程中出现乱码,进而引发数据截断异常。在编写 Servlet 时,应先确定编码,以避免此类问题[^3]。 ### 检查数据范围 对于 `exchange days` 列值超出范围的问题,需要检查插入的数据是否在该列定义的有效范围内。如果超出范围,应调整插入的数据,使其符合列定义的范围。 ### 示例代码 以下是一个简单的 JDBC 插入数据的示例,展示了如何正确设置参数顺序和处理数据: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; public class InsertDataExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database"; String username = "your_username"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(url, username, password)) { String sql = "INSERT INTO your_table (password, admin_id, create_time, exchange_days) VALUES (?, ?, ?, ?)"; try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) { // 设置参数顺序要与 SQL 语句一致 preparedStatement.setString(1, "your_password"); preparedStatement.setString(2, "your_admin_id"); // 设置符合 timestamp 格式的数据 preparedStatement.setTimestamp(3, new Timestamp(System.currentTimeMillis())); // 设置在 exchange days 列有效范围内的数据 preparedStatement.setInt(4, 10); preparedStatement.executeUpdate(); System.out.println("Data inserted successfully."); } } catch (SQLException e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值