我试图在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();
    }

我该如何解决这个问题?

推荐答案

您试图插入的数据大于第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可避免此异常.

Mysql相关问答推荐

MySQL InnoDB:可以在没有回滚损失的情况下从运行的查询中进行大型插入吗

MySQL嵌套的内连接使查询变得很慢-解决方案?

mysqli 无法以非 root 用户身份连接

Select 同一张表中的结果数?

如何在 axios 请求中将更新的设置状态值作为参数传递

谁能帮我优化低性能的mysql查询

SQL 根据多行值获取记录

如何显示患者预约中的专业人员姓名?

插入重复键查询以在每一行上进行自定义更新

用两个新列制作表格,按偶数或奇数对另一列进行分类,并将一个类别中的所有偶数和奇数相加

如果在表中多次发现 a 列中的相同值,则排除所有行

WHERE SQL 语句中的列顺序是否重要

如何为 php 启用 mysqlnd?

Mysql:创建表时将DATETIME的格式设置为'DD-MM-YYYY HH:MM:SS'

在 Mac 上设置 Laravel php artisan migrate 错误:没有这样的文件或目录

如何改进 INSERT INTO ... SELECT 锁定行为

MySQL查询/子句执行顺序

MySQLgo 除非数字字符进行比较

数据截断:第 1 行的logo列数据太长

MySQL合并两列并添加到一个新列中