数据截断:对于第 1 行的“徽标”列而言,数据太长

2022-08-31 19:48:37

我正在尝试将照片插入到MySQL表的BLOB列中,但我得到一个例外:

Data too long for column 'logo' at row 1. 

下面是 JDBC:

    int idRestaurant = 42;
    String restoname=  "test";
    String restostatus=  "test";
    InputStream fileContent = getUploadedFile();
    int fileSize = getUploadedFileSize();

    Class.forName("com.mysql.jdbc.Driver");
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/resto" , "root" , "" )) {
        PreparedStatement ps = conn.prepareStatement("insert into restaurants (idRestaurant, restaurantName, status, logo) values(?,?,?,?)");
        ps.setInt(1, idRestaurant);
        ps.setString(2, restoname);
        ps.setString(3, restostatus);
        ps.setBinaryStream(4, fileContent, fileSize);
        ps.executeUpdate();
        conn.commit();
    }

如何解决此问题?


答案 1

您正在尝试插入的数据大于该列所允许的数据。logo

根据需要使用以下数据类型

TINYBLOB   :     maximum length of 255 bytes  
BLOB       :     maximum length of 65,535 bytes  
MEDIUMBLOB :     maximum length of 16,777,215 bytes  
LONGBLOB   :     maximum length of 4,294,967,295 bytes  

用于避免此异常。LONGBLOB


答案 2

使用数据类型而不是在数据库表中。LONGBLOBBLOB


推荐