如何使用Coldfusion在mySQL中将Word文档存储为BLOB

如何使用Coldfusion在mySQL中将Word文档存储为BLOB,mysql,coldfusion,blob,Mysql,Coldfusion,Blob,一个客户希望Word文档保存到mySQL数据库,尽管我反对。文档本身不应特别大,每个文档不应超过1MB。我已在CF administrator中启用BLOB,并将BLOB缓冲区设置为1000000 这是我的SQL <cfset newMessageID=1569> <cfset fileName="c:\temp\0.doc"> <cffile action = "readbinary" file = "#fileName#" variable = "fileD

一个客户希望Word文档保存到mySQL数据库,尽管我反对。文档本身不应特别大,每个文档不应超过1MB。我已在CF administrator中启用BLOB,并将BLOB缓冲区设置为1000000

这是我的SQL

<cfset newMessageID=1569>
<cfset fileName="c:\temp\0.doc">

<cffile action = "readbinary" 
file = "#fileName#"
variable = "fileData">

<cfquery name="addFile" datasource='#application.dsn#'>
    INSERT into files (fileID, fileData)
    Values (#newMessageID#, <cfqueryparam value="#fileData#" cfsqltype="CF_SQL_BLOB">)
</cfquery>

插入文件(文件ID、文件数据)
值(#newMessageID#,)
我得到“数据截断:第1行的'filedata'列的数据太长”错误。files表中的filedata字段肯定设置为blob。我做错了什么

CF 9.01,mySQL 5.4


我做错了什么

什么样的斑点?有不同的类型,包括。Blob(大约)为2^16=65536字节,中间Blob为2^24=16777216字节。如果你认为你可能会超过中等尺寸,那么就选择长尺寸ie 2^32。

这是个坏主意

我想:

  • 首先将其转换为文本文件,然后简化原始文本的导入

  • 或者只需将其上传到某个文件夹,然后再次下载或在线查看即可


  • 你在试图将它存储到数据库中时割断了自己的喉咙…

    你认为你需要将
    #fileData#
    包装在
    ToBase64()
    -请参阅这里的文档:Read使用
    BinaryEncode()
    将其转换回:我已经尝试过了。如果我简单地转换为toBase64,它会在我的cfqueryparam中抛出一个强制转换错误。如果我在没有cfqueryparam的情况下运行,我会返回到“数据对于'filedata'列来说太长了”@Saul-什么样的
    blob
    ?有不同类型的长,中。。。还有@Leigh-就在这一分钟发现了这一点。是blob,改成了longblob,这就解决了它。我认为mediumblob太小了,只占2^16=65536字节多一点,这是正确的吗?@Saul-是的,但那是
    blob
    。中等斑点为2^24~16777216。如果你认为你可能会超过这一点,那么就使用
    longblob
    。你在专栏文章中读到我反对它,对吗?在一天结束时,他谁支付风笛手。。。无论如何,我不认为这会太糟糕。我解析Word文档并将元数据存储在一个表中,这是所有查询/连接所使用的数据。files表只有ID和mediumblob。从文件安全性的好处来看,日志记录和备份更容易;-)