मैं MySQL में बाइनरी डेटा कैसे स्टोर करूं ?
मैं MySQL में बाइनरी डेटा कैसे स्टोर करूं ?
जवाबों:
Phpguy द्वारा उत्तर सही है, लेकिन मुझे लगता है कि अतिरिक्त विवरणों में बहुत भ्रम है।
मूल उत्तर BLOB
डेटा प्रकार / विशेषता डोमेन में है। बीएलओबी बाइनरी लार्ज ऑब्जेक्ट के लिए छोटा है और बाइनरी डेटा से निपटने के लिए कॉलम डेटा प्रकार विशिष्ट है।
इस तरह एक मेज के लिए:
CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
);
यहाँ एक PHP उदाहरण है:
<?php
// store.php3 - by Florian Dittmer <dittmer@gmx.net>
// Example php script to demonstrate the storing of binary files into
// an sql database. More information can be found at http://www.phpbuilder.com/
?>
<html>
<head><title>Store binary data into SQL Database</title></head>
<body>
<?php
// Code that will be executed if the form has been submitted:
if ($submit) {
// Connect to the database (you may have to adjust
// the hostname, username or password).
mysql_connect("localhost", "root", "password");
mysql_select_db("binary_data");
$data = mysql_real_escape_string(fread(fopen($form_data, "r"), filesize($form_data)));
$result = mysql_query("INSERT INTO binary_data (description, bin_data, filename, filesize, filetype) ".
"VALUES ('$form_description', '$data', '$form_data_name', '$form_data_size', '$form_data_type')");
$id= mysql_insert_id();
print "<p>This file has the following Database ID: <b>$id</b>";
mysql_close();
} else {
// else show the form to submit new data:
?>
<form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
File Description:<br>
<input type="text" name="form_description" size="40">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<br>File to upload/store in database:<br>
<input type="file" name="form_data" size="40">
<p><input type="submit" name="submit" value="submit">
</form>
<?php
}
?>
</body>
</html>
मैं रिलेशनल डेटाबेस में बाइनरी डेटा स्टोर करने के खिलाफ दृढ़ता से सलाह देता हूं । संबंधपरक डेटाबेस को निश्चित आकार के डेटा के साथ काम करने के लिए डिज़ाइन किया गया है; यही कारण है कि उनके प्रदर्शन की ताकत है: जोएल के पुराने लेख को याद रखें कि डेटाबेस इतने तेज़ क्यों हैं? क्योंकि यह एक रिकॉर्ड से दूसरे रिकॉर्ड में जाने के लिए ठीक 1 पॉइंटर इन्क्रीमेंट लेता है। यदि आप अपरिभाषित और अत्यधिक भिन्न आकार के BLOB डेटा जोड़ते हैं, तो आप प्रदर्शन को बढ़ा देंगे।
इसके बजाय, फ़ाइल सिस्टम में फ़ाइलों को संग्रहीत करें, और अपने डेटाबेस में फ़ाइल नामों को संग्रहीत करें।
जब आपने यह नहीं कहा कि आप क्या कर रहे हैं, और ऐसा करने के लिए आपके पास एक बड़ा कारण हो सकता है, तो अक्सर इसका जवाब 'फाइलसिस्टम संदर्भ के रूप में' होता है और वास्तविक डेटा कहीं न कहीं फाइल सिस्टम पर होता है।
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
यह उस डेटा पर निर्भर करता है जिसे आप स्टोर करना चाहते हैं। उपरोक्त उदाहरण LONGBLOB
डेटा प्रकार का उपयोग करता है , लेकिन आपको पता होना चाहिए कि अन्य बाइनरी डेटा प्रारूप हैं:
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY
प्रत्येक के उपयोग के मामले हैं। यदि यह एक ज्ञात (छोटी) लंबाई है (उदाहरण के लिए पैक डेटा) अक्सर बार BINARY
या VARBINARY
काम करेगा। उन पर टन सूचकांक में सक्षम होने का अतिरिक्त लाभ है।
यदि - अनुशंसित नहीं है - BLOB फ़ील्ड मौजूद है, तो आप डेटा को इस तरह से बचा सकते हैं:
mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");
आइडिया से लिया यहाँ ।
प्रश्न यह भी उठता है कि डेटा को BLOB में कैसे लाया जाए। आप डेटा को INSERT स्टेटमेंट में डाल सकते हैं, जैसा कि PHP उदाहरण दिखाता है (हालाँकि आपको Addlashes के बजाय mysql_real_escape_string का उपयोग करना चाहिए )। यदि फ़ाइल डेटाबेस सर्वर पर मौजूद है, तो आप MySQL के LOAD_FILE का भी उपयोग कर सकते हैं
जब मुझे बाइनरी डेटा स्टोर करने की आवश्यकता होती है VARBINARY
, तो मैं हमेशा प्रारूप का उपयोग करता हूं , जैसा कि प्रस्तुत किया गया है byd0nut
।
आप दस्तावेज़ के विषय 12.4.2 के तहत MySQL वेबसाइट पर डॉक्यूमेंटेशन पा सकते हैं । BINARY और VARBINARY प्रकार
आप पूछ रहे हैं, तो क्या advantagese हैं, तो कृपया प्रश्न पर देखने क्यों-varbinary-बजाय के- varchar