문제

바이너리 데이터를 어떻게 저장하나요? MySQL?

도움이 되었습니까?

해결책

phpguy의 답변은 정확하지만 추가 세부 사항에 많은 혼란이 있다고 생각합니다.

기본적인 대답은 BLOB 데이터 유형/속성 도메인. 얼룩 Binary Large Object의 약어이며 해당 열 데이터 유형은 이진 데이터 처리에 특정합니다.

보다 MySQL 관련 매뉴얼 페이지.

다른 팁

다음과 같은 테이블의 경우:

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 작동합니다.여기에는 색인을 생성할 수 있다는 추가 이점이 있습니다.

꼭 필요한 것은 아니지만 시도해 볼 수 있습니다. base64 데이터를 인코딩하고 디코딩합니다.즉, db에는 ASCII 문자만 포함됩니다.조금 더 많은 공간과 시간이 필요하지만 바이너리 데이터와 관련된 모든 문제는 제거됩니다.

만약 - 권장하지 않음 - BLOB 필드가 존재하면 다음과 같은 방법으로 데이터를 저장할 수 있습니다.

mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");

아이디어에서 따옴 여기.

또한 데이터를 BLOB에 가져오는 방법에 대한 질문도 발생합니다.PHP 예제에서 볼 수 있듯이 INSERT 문에 데이터를 넣을 수 있습니다. mysql_real_escape_string 추가 속눈썹 대신).파일이 데이터베이스 서버에 존재하는 경우 MySQL의 LOAD_FILE

바이너리 데이터를 저장해야 할 때 항상 사용합니다. VARBINARY 소개된 형식 byd0nut.

문서화된 주제 아래의 MySQL 웹사이트에서 문서를 찾을 수 있습니다. 12.4.2 BINARY 및 VARBINARY 유형

장점이 무엇인지 묻는다면 질문을 살펴보십시오. 왜 varchar 대신 varbinary를 사용합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top