আমি মাইএসকিউএলে বাইনারি ডেটা কীভাবে সঞ্চয় করব ?
আমি মাইএসকিউএলে বাইনারি ডেটা কীভাবে সঞ্চয় করব ?
উত্তর:
পিএইচপিগুইয়ের উত্তরটি সঠিক তবে আমি মনে করি সেখানে অতিরিক্ত বিবরণে অনেক বিভ্রান্তি রয়েছে।
প্রাথমিক উত্তরটি BLOB
ডেটা টাইপ / বৈশিষ্ট্যযুক্ত ডোমেনে। 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
// 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>
আমি একটি আপেক্ষিক ডাটাবেসে বাইনারি ডেটা সংরক্ষণের বিরুদ্ধে দৃ strongly়ভাবে প্রস্তাব দিই । সম্পর্কিত সম্পর্কিত ডাটাবেসগুলি স্থির আকারের ডেটা দিয়ে কাজ করার জন্য ডিজাইন করা হয়েছে; তাদের পারফরম্যান্সের শক্তিটি এখানে: জোয়েলের পুরানো নিবন্ধটি মনে রাখবেন ডেটাবেসগুলি এত দ্রুত কেন ? কারণ রেকর্ড থেকে অন্য রেকর্ডে যেতে ঠিক 1 পয়েন্টার বর্ধন লাগে। আপনি যদি অপরিশোধিত এবং বিস্তৃত আকারের বিএলওবি ডেটা যুক্ত করেন তবে আপনি কার্য সম্পাদন করবেন।
পরিবর্তে ফাইল সিস্টেমে ফাইল সঞ্চয় করুন এবং আপনার ডাটাবেসে ফাইলের নাম সংরক্ষণ করুন।
আপনি যা সংরক্ষণ করছেন তা আপনি বলেননি, এবং এটি করার জন্য আপনার কাছে দুর্দান্ত কারণ থাকতে পারে, প্রায়শই উত্তরটি 'ফাইল সিস্টেমের রেফারেন্স হিসাবে' হয় এবং আসল ডেটা কোথাও ফাইল সিস্টেমে থাকে।
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");
আইডিয়া এখান থেকে নেওয়া ।
প্রশ্নটি উত্থাপিত হয় কীভাবে বিএলএব-তে ডেটা পাবেন। আপনি ডেটা একটি INSERT বিবৃতিতে রাখতে পারেন, যেমন পিএইচপি উদাহরণটি দেখায় (যদিও আপনার অ্যাডল্যাশগুলির পরিবর্তে mysql_real_escape_string ব্যবহার করা উচিত )। ফাইলটি ডাটাবেস সার্ভারে উপস্থিত থাকলে আপনি মাইএসকিউএল এর LOAD_FILE ব্যবহার করতে পারেন
আমার যখন বাইনারি ডেটা সংরক্ষণ করার দরকার হয় তখন আমি সর্বদা VARBINARY
ফর্ম্যাট ব্যবহার করি , যেমনটি চালু করা হয়েছিল byd0nut
।
আপনি নথিভুক্ত বিষয়ের অধীনে মাইএসকিউএল ওয়েবসাইটে ডকুমেন্টেশন সন্ধান করতে পারেন 12.4.2 বারাইন এবং ভারবিনারি প্রকারসমূহ
আপনি যদি সুবিধাজনক কি তা জিজ্ঞাসা করছেন তবে দয়া করে কেন বার্চারের পরিবর্তে-বর্ণের প্রশ্নটি দেখুন