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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top