本文目录一览

1,mysql 怎么样贮存大文件

你要是做程序的话,应该把图片存在设置的文件夹中,数据库只存图片的路径。 如果想存文件建议用oracle。mysql对存储文件相对效率不高。
数据库里最好只存放文件路径
在my.ini中有设置1般情况下,在mysql安装目录的data目录下

mysql 怎么样贮存大文件

2,Mysql数据文件存放在什么地方

win7对mysql的安装路径,做了改变,data在一个隐藏文件中,路径是这样的C:\ProgramData\MySQL\MySQL Server 5.5\data就是program Files 旁边,有个隐藏的文件叫ProgramData打开隐藏文件查看的方式为:左上角的组织 -- 文件夹搜索选项-- 查看 --隐藏文件和文件夹 这边设置改下,

Mysql数据文件存放在什么地方

3,如何将大文件写入到数据库中

最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上的很多文件很重要,例如很多PPT和讲义。所以需要经常备份,而且因为这些文件很多,所以需要增量备份。我尝试用过windows自带的ntbackup工具,但感觉不是很爽。它不支持压缩备份,而且界面也有点复杂。为了响应伟大领袖的“自力更生,丰衣足食”的号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。本文分享一下其中一些重点的技术细节其中一个关键的技术就是将文件使用二进制的方式存放在数据库的varbinary(max)的字段中。该字段最大允许的长度为2GB。对于一些小文件,我们可以一次性读取它的所有字节,然后一次提交到数据库/// <summary>/// 这个方法演示了如何一次提交所有的字节。这样导致的结果是:应用程序立即需要申请等同于文件大小的内存/// </summary>static void SubmitFileByOnce() string file = @"F:\功夫熊猫.rmvb";//文件大小为519MB byte[] buffer = File.ReadAllBytes(file); using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true")) using (SqlCommand cmd = conn.CreateCommand()) cmd.CommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)"; cmd.Parameters.AddRange( new[] new SqlParameter("@fileName",file), new SqlParameter("@fileContents",buffer) }); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } }}但是,上面的方法有几个问题,主要体现在如果文件比较大的话1. 它需要一次性很大的内存,具体数据等同于文件大小。因为File.ReadAllBytes方法是将所有字节全部读入到内存。2. 它会导致提交失败,就是因为数据太大了。数据库也会拒绝。那么,我就对这个方法做了一下改进,将文件拆分为5MB一段,也就是说,此时每次申请的内存只有5MB。这就大大地提高了可用性。/// <summary> /// 这个方法是将文件切分为5MB的块,每次只是提交5MB,所以可能多次提交,但内存占用就比较小 /// </summary> static void SubmitFileStepByStep() string file = @"F:\功夫熊猫.rmvb";//以这个文件为例,大小为519MB,一共需要的时间大约94秒。还是有点慢的,所以还可能需要进行压缩 FileStream fs = new FileStream(file, FileMode.Open); byte[] buffer = new byte[5 * 1024 * 1024]; int readCount; using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true")) conn.Open(); while ((readCount = fs.Read(buffer, 0, buffer.Length)) > 0) using (SqlCommand cmd = conn.CreateCommand()) cmd.CommandText = "INSERT INTO Files(FileName,FileContents) VALUES(@fileName,@fileContents)"; cmd.Parameters.AddRange( new[] new SqlParameter("@fileName",file), new SqlParameter("@fileContents",buffer) }); cmd.ExecuteNonQuery(); } } conn.Close(); } }这样的话,有一个后果就是一个文件,可能在数据库中会有多条记录。所以在读取的时候,我们需要对其进行合并static void DownloadFile() string file = @"F:\功夫熊猫.rmvb"; string destfile = @"E:\Temp\Temp.wmv"; using (SqlConnection conn = new SqlConnection("server=(local);database=demo;integrated security=true")) using (SqlCommand cmd = conn.CreateCommand()) cmd.CommandText = "SELECT FileContents FROM Files WHERE FileName=@fileName"; cmd.Parameters.AddRange( new[] new SqlParameter("@fileName",file), }); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); FileStream fs = new FileStream(destfile, FileMode.Append, FileAccess.Write); while (reader.Read()) byte[] buffer = (byte[])reader[0]; fs.Write(buffer, 0, buffer.Length); } fs.Close(); reader.Close(); conn.Close(); } }}本文由作者:陈希章

如何将大文件写入到数据库中


文章TAG:大文件保存在哪个数据库  mysql  怎么样贮存大文件  
下一篇