得到了这个例外:
Exception: Data truncation: Data too long for column 'subject' at row 1
此数据仅供显示,因此可以截断。
简单的做法是在逻辑中截断 - subject = subject.subString(0, 100)
- 但这会将MySQL中的最大长度复制到Java中的硬编码数。 MySQL或JDBC中是否有任何功能(如果重要的话,我使用的是c3p0)会截断以自动适应吗?
答案 0 :(得分:1)
如果未启用严格的SQL模式,并且您为CHAR或VARCHAR列分配的值超出了列的最大长度,则会截断该值以适应并生成警告。
(来自The CHAR and VARCHAR Types)
如果您不介意将MySQL服务器模式更改为不严格,则不会抛出任何异常。
请参阅Server Modes
答案 1 :(得分:0)
使用定义宽度的列属性,而不是硬编码100。 你根本不关心它在数据库中存在多长时间,只是根据你的客户端长度定义它不会爆炸。
答案 2 :(得分:0)
插入时截断是一个异常,驱动程序需要抛出异常(DataTruncation
);请参阅JDBC 4.1的第8.3节:
在写入数据源时发生数据截断时,a 抛出DataTruncation对象。已被截断的数据值可能 即使已生成警告,也已写入数据源。什么时候 数据截断发生在从数据源读取时,会报告SQLWarning。
还有一个静默截断(在语句上使用setMaxFieldSize()
,但Javadoc只讨论ResultSet中的字段,因此不清楚它是否也应用于PreparedStatement上设置的参数。