Усеченные строки - PullRequest
       6

Усеченные строки

0 голосов
/ 01 сентября 2010

Я работаю с данными сторонних пользователей, которые могут или не могут вписаться в нашу базу данных.Данные должны быть усечены, если они слишком длинные.

Мы используем IBatis с Connector / J.Если данные слишком длинные, возникает исключение SQL.У меня было два варианта: либо обрезать строки в Java, либо обрезать строки в SQL с использованием подстроки.

Мне не нравится усекать строки в sql, потому что я пишу структуру таблиц в нашем Ibatis XML, но SQL, с другой стороны, знает о сопоставлении нашей базы данных (что не согласуется и будет дорогосделать согласованным) и может обрезать строку в многобайтовом безопасном режиме.

Есть ли способ, чтобы Connector / J просто вставил этот SQL-код и, если нет, какой маршрут люди порекомендовали бы?

1 Ответ

3 голосов
/ 02 сентября 2010

Согласно документации MySQL возможно, что вставка данных, длина которых превышает длину, может рассматриваться как предупреждение:

Вставка строки в строку столбец (CHAR, VARCHAR, TEXT или BLOB) это превышает максимум столбца длина. Значение усекается до максимальная длина столбца.

Одним из свойств Соединителя / J является jdbcCompliantTruncation. Это его описание :

Устанавливает, должен ли Connector / J бросить java.sql.DataTruncation исключения, когда данные усекаются. Это требуется JDBC спецификация при подключении к сервер, который поддерживает предупреждения (MySQL 4.1.0 и новее). Это свойство не действует, если серверный режим sql включает STRICT_TRANS_TABLES. Обратите внимание, что если STRICT_TRANS_TABLES не установлен, это будет установлен в результате использования этого опция строки подключения.

Если я правильно понимаю, тогда установка этого свойства в false не вызывает исключение, а вставляет усеченные данные. Это решение не требует усечения данных в программном коде или операторах SQL, но делегирует их в базу данных.

...