0

我知道 c# 中的字符串类型可以保存一个长字符串,所以为什么当我从 asp.net 表单传递文本时,在该字符串变量中,文本实际上被剪切了。

当我跟踪代码时,我可以在文本可视化器中看到整个长字符串都在那里,但是在运行代码之后,我可以看到这个字符串变量数据在 MySQL 数据库中被削减了一半。MySQL 中的列大小为 TEXT,最多可容纳 4 GB。

所以我想知道是否有人知道这个字符串截断是怎么回事。

4

3 回答 3

3

TEXT 最多可包含 65,535 个字符。如果您的内容超过 64K 字节,则您可能超出了字段字符的限制。

要对此进行测试,您可以将字段类型更改为 MEDIUMTEXT 或 LONGTEXT

于 2013-03-12T23:06:38.470 回答
1

根据 MySQL dosc TEXT 字段最多可容纳 L + 2 个字节,其中 L < 2^16。-> http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html

如果一个字符占用 2 个字节,则最大大小为 ~32.7k 字符。

于 2013-03-12T23:11:23.940 回答
0

http://www.electrictoolbox.com/maximum-length-mysql-text-field-types/

TEXT 数据类型还能够存储比 VARCHAR 和 CHAR 文本类型更多的数据,因此在数据库中存储网页或类似内容时需要使用 TEXT 类型。

每种数据类型可以存储的最大数据量如下:

TINYTEXT 256 字节

文本 65,535 字节 ~64kb

中文本 16,777,215 字节 ~16MB

LONGTEXT 4,294,967,295 字节 ~4GB

在大多数情况下,TEXT 类型可能就足够了,但如果您正在编写内容管理系统,最好对较长的页面使用 MEDIUMTEXT 类型,以确保不会出现数据大小限制的问题。

更新: SqlParameter.Size (我假设 MySQL 也是如此)可以在将字符串内容发送到数据库之前对其进行剪切。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.size.aspx

对于具有可变长度类型(例如 nvarchar)的输出参数,参数的大小定义了保存输出参数的缓冲区的大小。可以将输出参数截断为使用 Size 指定的大小。对于字符类型,使用 Size 指定的大小以字符为单位。

如果未显式设置,则从指定参数值的实际大小推断大小。

所以删除设置 ADO.NET 参数的 Size 参数的代码或尝试将其设置为 int.Max 值。

于 2013-03-12T23:15:11.140 回答