如何在mysql中输入200的前100个字符

时间:2011-05-05 08:03:13

标签: java mysql hibernate

我在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.

4 个答案:

答案 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)

试试这个

SELECT INSERT('your string', 0, 100, '');

REFERENCE

答案 3 :(得分:0)

在不更改源代码的情况下执行此操作的唯一方法是调整MySQL服务器的配置。更具体地说,sql_mode变量:

我相信你必须设置STRICT_TRANS_TABLES

  

对于STRICT_TRANS_TABLES,MySQL   将无效值转换为   列的最接近的有效值和   插入调整后的值。如果是一个值   缺少,MySQL插入隐式   列数据的默认值   类型。无论哪种情况,MySQL都会生成   警告而不是错误   继续处理声明。   隐式默认值在中描述   第10.1.4节“数据类型默认值   值”。

但是,重要的是要注意此设置会影响许多其他事情。我看到不更改源代码的唯一原因是您无法访问它,在这种情况下,您可以放大数据库列。