java - una - Truncamiento de datos: datos demasiado largos para la columna ''logo'' en la fila 1
truncar decimales en excel (3)
Está intentando insertar datos que son más grandes que los permitidos para el logo
la columna.
Use los siguientes tipos de datos según su necesidad
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
Use LONGBLOB
para evitar esta excepción.
Estoy tratando de insertar una foto en una columna BLOB de una tabla MySQL, y recibo una excepción:
Data too long for column ''logo'' at row 1.
Aquí está el 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();
}
¿Cómo resuelvo este problema?
La siguiente solución funcionó para mí. Al conectarse a la base de datos, especifique que los datos deben truncarse si son demasiado largos (jdbcCompliantTruncation). Mi enlace se ve así:
jdbc:mysql://SERVER:PORT_NO/SCHEMA?sessionVariables=sql_mode=''NO_ENGINE_SUBSTITUTION''&jdbcCompliantTruncation=false
Si aumenta el tamaño de las cadenas, puede enfrentar el mismo problema en el futuro si la cadena que está intentando almacenar en la base de datos es más larga que el nuevo tamaño.
EDITAR: STRICT_TRANS_TABLES debe eliminarse de sql_mode también.
Use el tipo de datos LONGBLOB
lugar de BLOB
en su tabla de base de datos.