我在mysql中有一个带varchar(100)的字段,我想存储前100个字符,因为我的数据长度是200个字符(忽略最后100个字符)。我不想更改我的源代码。这在MS-Access和MS Server中是可能的,但我想在mysql中执行此操作。
我在java中用hibernate应用它,意味着我没有为此编写插入代码。在这里,我只使用save()方法并抛出“大数据”。
我有例外 -
引起:java.sql.BatchUpdateException:数据截断:第1行的列'FBUrl'的数据太长
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1527) at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1065) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) glb.chatmeter.exception.AdException: Could not Save Facebook page Data.
答案 0 :(得分:6)
注意:在下面一小时后,问题被编辑了实质性更改。这个答案回答了原来的问题,但没有解决编辑过的版本。
您可以使用substring
:
INSERT INTO MyTable (Myfield) values (SUBSTRING('long string', 1, 100))
pos
参数从1
开始(奇怪地),如果len
参数大于您实际插入的长度,则可以。
答案 1 :(得分:2)
您可以使用SUBSTRING()
修剪插入内容:
INSERT INTO table (column) VALUES (SUBSTRING("your data...", 1, 100))
答案 2 :(得分:1)
答案 3 :(得分:0)
在不更改源代码的情况下执行此操作的唯一方法是调整MySQL服务器的配置。更具体地说,sql_mode
变量:
我相信你必须设置STRICT_TRANS_TABLES
:
对于STRICT_TRANS_TABLES,MySQL 将无效值转换为 列的最接近的有效值和 插入调整后的值。如果是一个值 缺少,MySQL插入隐式 列数据的默认值 类型。无论哪种情况,MySQL都会生成 警告而不是错误 继续处理声明。 隐式默认值在中描述 第10.1.4节“数据类型默认值 值”。
但是,重要的是要注意此设置会影响许多其他事情。我看到不更改源代码的唯一原因是您无法访问它,在这种情况下,您可以放大数据库列。