|
0
|
| Tony Fontenot · 技术社区 · 17 年前 |
|
|
1
2
我们可以假设你的意思是你在给C打电话吗 ODBC数据库 记录集::Open(),是吗?或者更确切地说,类似于:
回复后编辑: 各种ODBC驱动程序存在一些已知的错误,这些错误似乎是由检索无效字段长度引起的。请查看以下链接:
这个特殊的原因似乎是CRecordset将分配一个足够大的缓冲区来保存该字段。由于列返回的长度为零,因此它被解释为最大32位大小(~2G),而不是最大8位大小(255字节)。不用说,它无法为字段分配足够的内存。 微软已经承认这是一个问题,看看这些解决方案: 问题后编辑附录: 因此,鉴于MySQL字段是LONGTEXT,CRecordSet似乎正在尝试为其分配最大可能大小(2G)。你真的需要2 gig来创建评论字段吗?打字速度为每分钟80个字,每小时6个字,打字员需要7年多一点的时间来填写这个字段,每天24小时不间断地工作:-)。 查看数据库中的所有列,看看它们是否具有适当的数据类型,这可能是一个有用的练习。我不是说你 不能 有一个2G列,只是你应该确定这是必要的,特别是考虑到当前的ODBC类无法处理那么大的字段。 |
|
|
2
0
阅读帕克斯的回复。它让你很好地理解了问题发生的原因。 工作周围: 只有当定义为(TEXT、LONGTEXT等)的字段为NULL(可能为空)时才会发生此错误。如果字段中有数据,则它将仅分配字段中数据的大小,而不是最大大小(从而导致错误)。 所以,如果有一种情况,你绝对必须拥有这些大字段。以下是一个潜在的解决方案:
|
|
|
3
0
我赞同Pax的建议,即这个错误是由于试图分配一个足够大的缓冲区来容纳最大的LONGTEXT。客户端在获取数据之前不知道数据有多大。 LONGTEXT确实比您在大多数应用程序中所需的要大得多。考虑使用MEDIUMTEXT(最大大小16MB)或仅使用TEXT(最大尺寸64KB)。 PHP数据库接口也存在类似的问题。PHP通常有内存大小限制,任何对LONGBLOB或LONGTEXT的读取都可能超过该限制。 |