截断字符串

发布于 2024-09-17 12:27:57 字数 312 浏览 5 评论 0原文

我正在使用第三方用户数据,这些数据可能适合也可能不适合我们的数据库。如果数据太长则需要截断。

我们将 IBatis 与 Connector/J 一起使用。如果数据太长,则会抛出 SQL 异常。我有两个选择:要么截断Java中的字符串,要么使用子字符串截断sql中的字符串。

我不喜欢截断 sql 中的字符串,因为我在 Ibatis XML 中编写表结构,但另一方面 SQL 知道我们的数据库排序规则(它不一致,并且要保持一致会很昂贵)并且可以截断以多字节安全方式的字符串。

有没有办法让 Connector/J 直接插入此 SQL,如果没有,人们会推荐哪条路线?

I'm working with third party user data that may or may not fit into our database. The data needs to be truncated if it is too long.

We are using IBatis with Connector/J. If the data is too long a SQL exception is thrown. I have had two choices: either truncate the strings in Java or truncate the strings in sql using substring.

I don't like truncating the strings in sql, because I am writing table structure in our Ibatis XML, but SQL on the other hand knows about our database collation (which isn't consistent and would be expensive to make consistent) and can truncate string in a multibyte safe manner.

Is there a way to have the Connector/J just straight insert this SQL and if not which route would people recommend?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终难愈 2024-09-24 12:27:57

根据 MySQL 文档,插入的数据可能超过长度可以被视为警告:

将字符串插入字符串
列(CHAR、VARCHAR、TEXT 或 BLOB)
超过列的最大值
长度。该值被截断为
列的最大长度。

Connector/J 属性之一是jdbcCompliantTruncation。这是其描述 :

这设置了 Connector/J 是否应该
抛出 java.sql.DataTruncation
数据被截断时出现异常。
这是 JDBC 所要求的
连接到时的规格
支持警告的服务器(MySQL
4.1.0 及更高版本)。如果服务器 sql-mode 包含此属性,则此属性无效
STRICT_TRANS_TABLES。请注意,如果
STRICT_TRANS_TABLES 未设置,它
将被设置为使用此的结果
连接字符串选项。

如果我理解正确,那么将此属性设置为 false 不会引发异常,而是插入截断的数据。此解决方案不需要您截断程序代码或 SQL 语句中的数据,而是将其委托给数据库。

According to the MySQL documentation it's possible that inserting data that exceeds the length could be treated as a warning:

Inserting a string into a string
column (CHAR, VARCHAR, TEXT, or BLOB)
that exceeds the column's maximum
length. The value is truncated to the
column's maximum length.

One of the Connector/J properties is jdbcCompliantTruncation. This is its description:

This sets whether Connector/J should
throw java.sql.DataTruncation
exceptions when data is truncated.
This is required by the JDBC
specification when connected to a
server that supports warnings (MySQL
4.1.0 and newer). This property has no effect if the server sql-mode includes
STRICT_TRANS_TABLES. Note that if
STRICT_TRANS_TABLES is not set, it
will be set as a result of using this
connection string option.

If I understand correctly then setting this property to false doesn't throw the exception but inserts the truncated data. This solution doesn't require you to truncate the data in program code or SQL statements, but delegates it to the database.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文