C# 保存到数据库时字符串被截断
我有一个定义为文本的数据库数据类型: 文本列是可变长度的列,最多可容纳2147483647(231-1)字节的可打印字符 这到底意味着什么?我可以将多少字符串保存到文本列中 基本上,我尝试将一个c#string对象保存到C# 保存到数据库时字符串被截断,c#,.net,database,C#,.net,Database,我有一个定义为文本的数据库数据类型: 文本列是可变长度的列,最多可容纳2147483647(231-1)字节的可打印字符 这到底意味着什么?我可以将多少字符串保存到文本列中 基本上,我尝试将一个c#string对象保存到 myString.ToString().Length == 39418 但是当我把它从数据库中取出来的时候 myString.ToString().Length == 32768 -----------编辑--------------- 伙计们,这太令人困惑了 文本列定义为
myString.ToString().Length == 39418
但是当我把它从数据库中取出来的时候
myString.ToString().Length == 32768
-----------编辑---------------
伙计们,这太令人困惑了
文本列定义为2147483647字节,即2GB
我试图保存的字符串是?System.Text.ascienceoding.Unicode.GetByteCount(param.Value.ToString())78836字节,即0.0000734217 GB
这就证实了我试图保存的内容对于文本数据类型列来说不是太大?i、 e.我正在将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 ...");
正如我在评论中提到的,不要使用
TEXT
,因为它已被弃用。对Unicode数据使用VARCHAR
或NVARCHAR
。这将允许您存储高达2GB的数据
可变长度Unicode字符串数据。n定义字符串长度和
可以是1到4000之间的值。max表示最大
存储大小为2^31-1字节(2 GB)。存储大小(以字节为单位)为
输入数据实际长度的两倍+2字节。国际标准化组织
nvarchar的同义词是民族性格和民族性格
变化的
2147483647字节约为1.862GB,是该列的最大容量。我假设您试图存储的数据对于该列来说太大,因此数据被截断。对该列使用nvarchar(MAX)类型
在我的连接字符串中,我需要添加textsize=2147483647如何将其从数据库中拉回来?如果这是SQL Server,请不要使用
text
作为数据类型,它已弃用。您如何将其保存到数据库中?如果您使用的是C#代码,我会假设您使用的是ADO或ORM…可能是重复的:要么在插入时(可能不太可能)截断,要么在读回(很可能)缓冲区时截断。发布获取myString的代码。谢谢。让我们假设我不能更改数据库的数据类型。那么,我基本上是不是在列中保存了太大的字符串?2147483647字节是什么意思?文本列不能处理长度为39418的字符串吗?我需要知道这个具体的问题please@Bob-2147483647字节约为1.862GB。我假设您试图存储的数据对于该列来说太大,因此数据被截断。Unicode在“最坏情况”中每个字符使用四个字节(iirc)<代码>39418*4谢谢。你知道我怎么知道一个39418个字符的字符串有多大,这样我就可以确认这一点了吗?顺便说一句(你不应该使用,而是使用)是非Unicode的,所以你应该有完整的2147483647个字符。即使服务器代码页使用双字节字符。一个有用的相关链接:谢谢meorfi,只是想先确认是否是因为列的数据类型。编辑问题以反映this@Bob,可以用分析器检查通过param.Value传递的字符串吗。在将其写入DB之前具有完整值,或者,当trunc从系统传递到DB时可能具有完整值。