保存到数据库时字符串被截断

时间:2013-06-11 12:49:42

标签: c# .net database

我有一个数据库数据类型定义为Text:

  

文本列是可变长度列,最多可容纳2,147,483,647(2 31 - 1)字节的可打印字符。

这究竟意味着什么?我可以将多少个字符串字符保存到“文本”列中?

基本上,我尝试将c#字符串对象保存到

列中
myString.ToString().Length == 39418

但是当我从数据库中取回时

myString.ToString().Length == 32768

----------- --------------- EDITED

这些人非常困惑。

Text列定义为2,147,483,647字节,即2GB

我想保存的字符串是?System.Text.ASCIIEncoding.Unicode.GetByteCount(param.Value.ToString())78836字节,即0.0000734217千兆字节

这样确认我想保存的内容对于Text数据类型列来说不是太大了吗?即我将0.0000734217 GB保存到一个能够处理2GB

的列中

我正在使用Sybase。像这样保存:

        OdbcParameter param = new OdbcParameter();
        param.DbType = DbType.String;
        param.Size = int.MaxValue;
        param.Value = myBigString
        parameters.Add(param);
        OdbcHelper.ExecuteNonQuery(connectionString, sql, parameters);

像这样撤退

    DataSet ds = new DataSet();
    OdbcConnection conn = new OdbcConnection(connectionString);
    OdbcDataAdapter adp = new OdbcDataAdapter(command, conn);
    conn.Open();
    adp.Fill(ds);....

此外,当我尝试这个时,我仍然可以看到数据被截断,因此在检索数据时看起来不像是一个问题

var obj = OdbcHelper.ExecuteScalar(connectionString, "select myBigString FROM ...");

3 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,不要使用TEXT,因为它已被弃用。使用VARCHARNVARCHAR获取Unicode数据。这将允许您存储最多2GB的数据。

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

  

可变长度的Unicode字符串数据。 n定义字符串长度和   可以是1到4,000之间的值。 max表示最大值   存储大小为2 ^ 31-1个字节(2 GB)。存储大小(以字节为单位)   输入数据的实际长度的两倍+ 2个字节。 ISO   nvarchar的同义词是national char vary和national character   变化

2,147,483,647字节大约是1.862GB,是该列的最大容量。我假设您尝试存储的数据对于列太大,因此数据被截断。

答案 1 :(得分:0)

对该列使用 nvarchar(MAX)类型

real example from a DB in action

答案 2 :(得分:0)

在我的连接字符串中,我需要添加textsize = 2147483647