Jak przechowywać dane binarne w MySQL ?
mysql
database
binary-data
data-storage
Geoff Dalgas
źródło
źródło
Odpowiedzi:
Odpowiedź phpguy jest poprawna, ale myślę, że istnieje wiele nieporozumień w dodatkowych szczegółach.
Podstawowa odpowiedź znajduje się w
BLOB
domenie typu / atrybutu danych. BLOB jest skrótem od Binary Large Object, a ten typ danych kolumny jest specyficzny dla obsługi danych binarnych.Zobacz odpowiednią stronę podręcznika MySQL .
źródło
W przypadku tabeli takiej jak ta:
Oto przykład PHP:
źródło
Gorąco polecam na przechowywanie danych binarnych w relacyjnej bazie danych. Relacyjne bazy danych są zaprojektowane do pracy z danymi o stałym rozmiarze; na tym polega ich siła wydajności: pamiętasz stary artykuł Joela, dlaczego bazy danych są tak szybkie? ponieważ przejście z rekordu do innego rekordu wymaga dokładnie 1 przyrostu wskaźnika. Jeśli dodasz dane BLOB o nieokreślonym i bardzo zróżnicowanym rozmiarze, obniżysz wydajność.
Zamiast tego przechowuj pliki w systemie plików i przechowuj nazwy plików w bazie danych.
źródło
Chociaż nie powiedziałeś, co przechowujesz, i możesz mieć z tego dobry powód, często odpowiedź brzmi „jako odniesienie do systemu plików”, a rzeczywiste dane są gdzieś w systemie plików.
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
źródło
To zależy od danych, które chcesz przechowywać. W powyższym przykładzie użyto
LONGBLOB
typu danych, ale należy pamiętać, że istnieją inne formaty danych binarnych:TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY
Każdy ma swoje przypadki użycia. Jeśli jest to znana (krótka) długość (np. Spakowane dane) często razy
BINARY
lubVARBINARY
zadziała. Mają dodatkową zaletę, że są w stanie indeksować ton.źródło
Chociaż nie powinno to być konieczne, możesz spróbować
base64
zakodować dane i je zdekodować. Oznacza to, że db będzie mieć tylko znaki ascii. Zajmie to trochę więcej miejsca i czasu, ale wszelkie problemy związane z danymi binarnymi zostaną wyeliminowane.źródło
Jeśli istnieje pole - nie zalecane - BLOB, możesz zapisać dane w ten sposób:
Pomysł zaczerpnięty stąd .
źródło
Powstaje również pytanie, jak wprowadzić dane do BLOBA. Możesz umieścić dane w instrukcji INSERT, jak pokazuje przykład PHP (chociaż powinieneś użyć mysql_real_escape_string zamiast dodawania). Jeśli plik istnieje na serwerze bazy danych, możesz także użyć LOAD_FILE MySQL
źródło
Kiedy muszę przechowywać dane binarne, zawsze używam
VARBINARY
formatu, zgodnie z wprowadzeniembyd0nut
.Dokumentację można znaleźć na stronie MySQL w udokumentowanym temacie 12.4.2 Typy BINARY i VARBINARY
Jeśli pytasz, jakie są zalety, spójrz na pytanie dlaczego-varbinary-zamiast-varchar
źródło