如何使用Coldfusion在mySQL中将Word文档存储为BLOB
一个客户希望Word文档保存到mySQL数据库,尽管我反对。文档本身不应特别大,每个文档不应超过1MB。我已在CF administrator中启用BLOB,并将BLOB缓冲区设置为1000000 这是我的SQL如何使用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
<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。从文件安全性的好处来看,日志记录和备份更容易;-)