Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据截断:列';标志';在第一排_Java_Mysql_Jdbc - Fatal编程技术网

Java 数据截断:列';标志';在第一排

Java 数据截断:列';标志';在第一排,java,mysql,jdbc,Java,Mysql,Jdbc,我试图将照片插入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 = getUplo

我试图将照片插入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();
    }

如何解决此问题?

在数据库表中使用数据类型
LONGBLOB
而不是
BLOB

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

以下解决方案对我有效。连接到数据库时,指定如果数据太长,则应截断数据(jdbcomplianttruncation)。我的链接如下所示:

jdbc:mysql://SERVER:PORT_NO/SCHEMA?sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false
如果您增加字符串的大小,如果您试图存储到DB中的字符串比新的大小长,则将来可能会遇到相同的问题


编辑:严格的转换表也必须从sql模式中删除。

您有三种选择来解决此问题。1.增加列数据类型的大小。2.减小插入该列的内容的大小。3.不要插入信息。我有一个长度为50的VARCHAR字段,这个字符串“amsterdam 12234 2^”(&*| |)即使长度小于50,也会给我同样的错误。数据格式也有任何限制吗?这部分“jdbcomplianttrunation=false”这是我真正需要的,因为首先我删除了严格的转换表,但没有任何效果。非常感谢!