1

我在 Java 中使用 Log4j 记录到 SQL Server 数据库时遇到了这个问题。当您尝试将数据插入超出其大小或限制的列时,通常会抛出它,但不幸的是,这不是我的情况。它记录了几秒钟,然后……砰!(未能执行 SQL - 数据截断)。

我发送包含 IP 地址的字符串:

log.debug("Connecting to server... 100.0.0.1");

我找到了这个:

表达式可能会无意中导致数据被截断。在以下情况下可能会发生截断:

字符串。例如,如果原始字符串包含双字节字符,则将具有 DT_WSTR 数据类型的字符串数据转换为具有 DT_STR 数据类型的相同长度的字符串(以字符为单位)会导致数据丢失。

有效数字。例如,将整数从 DT_I4 数据类型转换为 DT_I2 数据类型或将无符号整数转换为有符号整数。无意义的数字。例如,将实数从 DT_R8 转换为 DT_R4,或将整数从 DT_I4 数据类型转换为 DT_R4 数据类型。

http://msdn.microsoft.com/en-us/library/ms137867.aspx

也许有人已经知道如何解决这个问题,所以我问。

谢谢阅读。

4

1 回答 1

1

我解决了这个问题。我错了:

当您尝试将数据插入超出其大小或限制的列时,通常会抛出它,但不幸的是,这不是我的情况。

因为是的,这是我的情况。我有一个 SmallInt 类型截断的列,因为我插入了非常大的数字,所以我只切换到 INT 并解决了问题。此外,如果它发生在字符串中,您可以尝试将 VARCHAR 更改为 NVARCHAR,因为 varchar 只接受 ASCII 而 nvarchar 也可以接受 UNICODE。

于 2013-07-24T12:15:06.073 回答