SQL 查询返回“值太长”

Posted

技术标签:

【中文标题】SQL 查询返回“值太长”【英文标题】:SQL query returns "value too long" 【发布时间】:2017-11-20 12:21:23 【问题描述】:

我有一个应该在内存中填充 DataTable 的 SQL 查询,但我收到一条错误消息,提示“Value 'Beginning of My value' 太长。”

查询在 SQL 编辑器中有效,但在我使用 C# 以编程方式运行时无效。计算它出现的值最多是 38 个字符长,至少 9 个字符。这不是很多,这让我对问题可能是什么感到困惑? SQL 查询在子查询的帮助下根据来自其他数据库表的数据创建一个动态表。

错误返回一个数字 (SQL0433N and SQLSTATE=22001),它将我引导至此 explanation page.

但是它不能直接帮助我解决我的问题。

一些示例代码,其中ImportSQLTable() 保存SQL 查询字符串。

 OdbcDataAdapter da = new OdbcDataAdapter(ImportSQLTable(ID), DbConnection);
 DataTable dt = new DataTable();

 da.Fill(dt); // Fill the table with data from the query

使用 .NET Framework 4.6.1

【问题讨论】:

编辑问题以添加允许人们帮助您的详细信息、查询、DDL、您在 C# 中的语言环境以及 Db2 数据库编码/表编码。如果您的应用程序和目标列之间的编码不同,那么您会出现这种症状(由固定宽度编码和可变宽度编码(如 utf-8)之间的差异引起)。 【参考方案1】:

我设法通过将显示错误的列转换为长度我觉得舒服的数据类型来解决此问题。

转换看起来像这样:

SELECT CAST(MyColumn as varchar(100)) as MyNewColumn

编辑:另一种方法,或者如果这不像我所经历的那样工作,是使用 @"" 当您将字符串存储在 C# 中时。看起来像这样:

public string mysqlString()

    return @"
             SELECT col1, col2, col3
             FROM MyDatabase
             WHERE col1 = 'mytext'
            ";

我不知道具体原因,但是改成这个值太长的错误就消失了!

【讨论】:

当我处理具有大文本列的表格时,通常会出现这种情况。

以上是关于SQL 查询返回“值太长”的主要内容,如果未能解决你的问题,请参考以下文章

DatabaseError:类型字符变化的值太长(100)

postgresql 错误:类型字符变化的值太长(256)

Django psycopg2.errors.StringDataRightTruncation:对于类型字符变化的值太长(200)

Python Django psycopg2.errors.StringDataRightTruncation:类型字符的值太长

org.postgresql.util.PSQLException:错误:对于类型字符变化的值太长(255)

尽管我的字符串在范围内,但类型字符变量(x)的值太长