灵魂腐蚀 发表于 2015-1-16 22:21:16

MSSQL教程之将图片贮存在MySQL数据库里

InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定<pstyle="TEXT-INDENT:2em">假如你想把二进制的数据,好比说图片文件和HTML文件,间接保留在你的MySQL数据库,那末这篇文章就是为你而写的!我将告知你如何经由过程HTML表单来贮存这些文件,如何会见和利用这些文件。<pstyle="TEXT-INDENT:2em">本文概述:<pstyle="TEXT-INDENT:2em">。在mysql中创建一个新的数据库<pstyle="TEXT-INDENT:2em">。一个如何贮存文件的例子程序<pstyle="TEXT-INDENT:2em">。一个如何会见文件的例子程序<pstyle="TEXT-INDENT:2em">在mysql中创建一个新的database<pstyle="TEXT-INDENT:2em">起首,你必需在你的mysql中创建一个新的数据库,我们将会把那些二进制文件贮存在这个数据库里。在例子中我会利用以下布局,为了创建数据库,<pstyle="TEXT-INDENT:2em">你必需做以下步骤:<pstyle="TEXT-INDENT:2em">。进进MySql把持器<pstyle="TEXT-INDENT:2em">。输出命令"createdatabasebinary_data;"<pstyle="TEXT-INDENT:2em">。输出命令"usebinary_data;"<pstyle="TEXT-INDENT:2em">。输出命令<pstyle="TEXT-INDENT:2em">"CREATETABLEbinary_data(idINT(4)<pstyle="TEXT-INDENT:2em">NOTNULLAUTO_INCREMENTPRIMARYKEY,<pstyle="TEXT-INDENT:2em">descriptionCHAR(50),bin_dataLONGBLOB,<pstyle="TEXT-INDENT:2em">filenameCHAR(50),filesizeCHAR(50),<pstyle="TEXT-INDENT:2em">filetypeCHAR(50));"(不克不及断行)<pstyle="TEXT-INDENT:2em">假如没成心外,数据库和表应当创建好了。<pstyle="TEXT-INDENT:2em">一个如何贮存文件的例子程序<pstyle="TEXT-INDENT:2em">用这个例子你能够经由过程Html表单将文件传输到数据库中。<pstyle="TEXT-INDENT:2em">store.php3<pstyle="TEXT-INDENT:2em">//store.php3-byFlorianDittmer<pstyle="TEXT-INDENT:2em">?><pstyle="TEXT-INDENT:2em">//假如提交了表单,代码将被实行:<pstyle="TEXT-INDENT:2em">if($submit){<pstyle="TEXT-INDENT:2em">//毗连到数据库<pstyle="TEXT-INDENT:2em">//(你大概必要调剂主机名,用户名和暗码)<pstyle="TEXT-INDENT:2em">MYSQL_CONNECT("localhost","root","password");<pstyle="TEXT-INDENT:2em">mysql_select_db("binary_data");<pstyle="TEXT-INDENT:2em">$data=addslashes(fread(fopen($form_data,"r"),filesize($form_data)));<pstyle="TEXT-INDENT:2em">$result=MYSQL_QUERY("INSERTINTObinary_data(description,bin_data,filename,filesize,filetype)<pstyle="TEXT-INDENT:2em">[接上一行:]VALUES($form_description,$data,$form_data_name,<pstyle="TEXT-INDENT:2em">$form_data_size,$form_data_type)");<pstyle="TEXT-INDENT:2em">$id=mysql_insert_id();<pstyle="TEXT-INDENT:2em">print"<pstyle="TEXT-INDENT:2em">ThisfilehasthefollowingDatabaseID:$id";<pstyle="TEXT-INDENT:2em">MYSQL_CLOSE();<pstyle="TEXT-INDENT:2em">}else{<pstyle="TEXT-INDENT:2em">//不然显现贮存新数据的表单<pstyle="TEXT-INDENT:2em">?><pstyle="TEXT-INDENT:2em">}?>



<pstyle="TEXT-INDENT:2em">假如你实行了这个程序,你将会瞥见一个复杂的Html表单,单击“扫瞄”选择一个文件,然后单击提交。<pstyle="TEXT-INDENT:2em">当文件上传至web服务器以后,程序将会告知你方才上传的文件的ID,记着这个ID,待会要用的。<pstyle="TEXT-INDENT:2em">一个如何会见文件的例子程序<pstyle="TEXT-INDENT:2em">你能够经由过程这个程序会见你方才贮存的文件<pstyle="TEXT-INDENT:2em">//getdata.php3-byFlorianDittmer<pstyle="TEXT-INDENT:2em">//挪用办法:getdata.php3?id=<pstyle="TEXT-INDENT:2em">if($id){<pstyle="TEXT-INDENT:2em">//你大概必要调剂主机名,用户名和暗码:<pstyle="TEXT-INDENT:2em">@MYSQL_CONNECT("localhost","root","password");<pstyle="TEXT-INDENT:2em">@mysql_select_db("binary_data");<pstyle="TEXT-INDENT:2em">$query="selectbin_data,filetypefrombinary_datawhereid=$id";<pstyle="TEXT-INDENT:2em">$result=@MYSQL_QUERY($query);<pstyle="TEXT-INDENT:2em">$data=@MYSQL_RESULT($result,0,"bin_data");<pstyle="TEXT-INDENT:2em">$type=@MYSQL_RESULT($result,0,"filetype");<pstyle="TEXT-INDENT:2em">Header("Content-type:$type");<pstyle="TEXT-INDENT:2em">echo$data;<pstyle="TEXT-INDENT:2em">};<pstyle="TEXT-INDENT:2em">?><pstyle="TEXT-INDENT:2em">程序必需晓得要会见谁人文件,你必需将ID作为一个参数。<pstyle="TEXT-INDENT:2em">比方:一个文件在数据库中的ID为2.你能够如许挪用它:<pstyle="TEXT-INDENT:2em">getdata.php3?id=2<pstyle="TEXT-INDENT:2em">假如你将图片贮存在数据库里,你能够向挪用图片一样挪用它。<pstyle="TEXT-INDENT:2em">Example:一个图片文件在数据库中的ID为3.你能够如许挪用它:<pstyle="TEXT-INDENT:2em">如何贮存年夜于1MB的文件:<pstyle="TEXT-INDENT:2em">假如你想贮存年夜于1MB的文件,你必需对你的程序、PHP设置、SQL设置举行很多修正,。<pstyle="TEXT-INDENT:2em">上面几条大概能够匡助你贮存小于24MB的文件:<pstyle="TEXT-INDENT:2em">1、修正store.php3,将MAX_FILE_SIZE的值改成24000000。<pstyle="TEXT-INDENT:2em">2、修正你的PHP设置,在一样平常情形下,PHP只同意小于2MB的文件,你必需将max_filesize(在php.ini中)的值改成24000000<pstyle="TEXT-INDENT:2em">3、往失落MYSQL的数据包巨细限定,在一样平常情形下MYSQL小于1MB的数据包.<pstyle="TEXT-INDENT:2em">4、你必需用以下参数重启你的MYSQL<pstyle="TEXT-INDENT:2em">/usr/local/bin/safe_mysqld-Okey_buffer=16M-Otable_cache=128-Osort_buffer=4M-Orecord_buffer=1M-Omax_allowed_packet=24M<pstyle="TEXT-INDENT:2em">5、假如仍旧堕落:多是超时毛病,假如你经由过程一个很慢的毗连来贮存一个很年夜的文件,PHP缺省的工夫限定为30秒。你能够将max_execution_time(在php.ini中)的值改成-1。

支持多线程,充分利用CPU资源

仓酷云 发表于 2015-1-17 17:53:52

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

爱飞 发表于 2015-1-21 06:57:57

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。

飘灵儿 发表于 2015-1-30 10:19:31

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

海妖 发表于 2015-2-6 10:01:00

但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)

蒙在股里 发表于 2015-3-4 16:41:58

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

变相怪杰 发表于 2015-3-11 20:30:40

对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。

小妖女 发表于 2015-3-19 12:10:27

代替了原来VB式的错误判断。比Oracle高级不少。

第二个灵魂 发表于 2015-3-28 01:57:37

你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
页: [1]
查看完整版本: MSSQL教程之将图片贮存在MySQL数据库里