truncar cadenas
-
26-09-2019 - |
Pregunta
Estoy trabajando con los datos de usuario de terceros que pueden o no pueden caber en nuestra base de datos. Las necesidades de datos a truncarse si es demasiado larga.
Estamos utilizando iBatis con Connector / J. Si los datos son demasiado tiempo se emite una excepción de SQL. He tenido dos opciones: o bien truncar las cadenas en Java o truncar las cuerdas en SQL utilizando subcadena.
No me gusta truncando las cadenas en SQL, porque estoy escribiendo estructura de la tabla en nuestra Ibatis XML, pero SQL en el otro lado sabe de nuestra base de datos de cotejo (que no es consistente y sería costoso para hacer consistente) y puede truncar cadenas de una manera segura de varios bytes.
¿Hay una manera de tener el Connector / J sólo directamente inserto este SQL y si no es la ruta que serían personas recomiendan?
Solución
De acuerdo con la documentación de MySQL es posible que la inserción de datos que supera la longitud podrían ser tratados como una advertencia:
Inserción de una cadena de caracteres en una cadena columna (CHAR, VARCHAR, TEXT, o BLOB) que supera al máximo de la columna longitud. El valor se trunca a la longitud máxima de la columna.
Una de las propiedades del conector / J es jdbcCompliantTruncation
. Esta es su descripción :
Esto establece si Connector / J debe tirar java.sql.DataTruncation excepciones cuando se truncan datos. Esto es requerido por el JDBC especificación cuando se conecta a una servidor que soporte las advertencias (MySQL 4.1.0 y posteriores). Esta propiedad no tiene efecto si el modo de sql-servidor incluye STRICT_TRANS_TABLES. Tenga en cuenta que si STRICT_TRANS_TABLES no se establece, se se establecerá como resultado del uso de este opción de cadena de conexión.
Si entiendo correctamente, entonces se establece esta propiedad en false no lanza la excepción sino inserta los datos truncados. Esta solución no requiere que para truncar los datos de código de programa o sentencias SQL, pero delega a la base de datos.