2

Text として定義されたデータベースのデータ型があります。

テキスト列は、最大 2,147,483,647 (2 31 - 1) バイトの印刷可能文字を保持できる可変長の列です。

それは正確にはどういう意味ですか?テキスト列に保存できる文字列の文字数は?

基本的に、ac# 文字列オブジェクトをその列に保存しようとします。

myString.ToString().Length == 39418

しかし、データベースから引き戻すと

myString.ToString().Length == 32768

-----------編集済み---------------

皆さん、これは非常に紛らわしいです。

Text 列は 2GB である 2,147,483,647 バイトとして定義されています。

保存しようとしている文字列は ?System.Text.ASCIIEncoding.Unicode.GetByteCount(param.Value.ToString()) 78836 バイト、つまり 0.0000734217 ギガバイトです。

それで、私が保存しようとしているものが Text データ型列には大きすぎないことが確認されましたか? つまり、2GB を処理できる列に 0.0000734217 GB を保存しています。

私はサイベースを使用しています。次のように保存します。

        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 ...");
4

3 に答える 3

2

コメントで述べたように、TEXT非推奨であるため使用しないでください。Unicode データにはVARCHARまたはを使用します。NVARCHARこれにより、最大2GBのデータを保存できます。

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

可変長の Unicode 文字列データ。n は文字列の長さを定義し、1 ~ 4,000 の値を指定できます。max は、最大ストレージ サイズが 2^31-1 バイト (2 GB) であることを示します。ストレージ サイズ (バイト単位) は、入力されたデータの実際の長さの 2 倍 + 2 バイトです。nvarchar の ISO シノニムは、国別文字可変および国別文字可変です。

2,147,483,647 バイトは約 1.862GB であり、その列の最大容量です。保存しようとしているデータが列に対して大きすぎるため、データが切り捨てられていると思います。

于 2013-06-11T12:58:36.570 に答える
0

その列にnvarchar(MAX)型を使用する

実際の DB の例

于 2013-06-11T13:27:08.107 に答える
0

接続文字列に textsize=2147483647 を追加する必要がありました

于 2013-06-12T14:46:17.320 に答える