- Konu sahibi
- #1
MySQL BLOB nedir?
MySQL’de
BLOB, metin yerine ikili verileri bayt olarak saklamak için kullanılan sütun türüdür. Resim, PDF, ZIP, ses, video veya başka bir dosyanın ham içeriği BLOB sütununda tutulabilir. BLOB verisi karakter kümesine göre dönüştürülmez; bu nedenle metin olmayan dosyalarda VARCHAR ya da TEXT yerine kullanılır.BLOB ile örnek veri saklama
Aşağıdaki örnek, bir dosyanın ikili içeriğini temsil eden birkaç baytı tabloya kaydeder ve bayt sayısını okur. Gerçek uygulamada
UNHEX yerine uygulama sürücüsünün parametre bağlama özelliğiyle dosyanın ham byte içeriği gönderilmelidir.- Tabloyu oluşturun:
Kod:CREATE TABLE medya ( id INT PRIMARY KEY AUTO_INCREMENT, dosya_adi VARCHAR(255) NOT NULL, mime_turu VARCHAR(100) NOT NULL, icerik BLOB NOT NULL ); - Örnek ikili veriyi ekleyin:
Kod:INSERT INTO medya (dosya_adi, mime_turu, icerik) VALUES ('ornek.bin', 'application/octet-stream', UNHEX('FFD8FFE0')); - Kaydedilen veriyi ve boyutunu kontrol edin:
Kod:SELECT id, dosya_adi, mime_turu, OCTET_LENGTH(icerik) AS bayt_sayisi, HEX(icerik) AS hex_degeri FROM medya;
Beklenen sonuçta
bayt_sayisi değeri 4, hex_degeri değeri ise FFD8FFE0 olur. Bu sonuç, verinin dört bayt olarak kaydedildiğini gösterir; bu dört bayt bir görsel dosyası oluşturmaz ve dosyanın güvenli/sağlam olduğunu kanıtlamaz.Sorgu hata verirse önce tablo adını, sütun türünü ve SQL sözdizimini kontrol edin. Veri ekleniyor ancak boyut beklenenden farklı çıkıyorsa, uygulamanın dosyayı metne dönüştürüp dönüştürmediğini inceleyin. Dosya boyutu sütun türünün sınırını aşıyorsa daha büyük BLOB türüne geçin; fakat bağlantı ve sunucu paket sınırlarını da ayrıca kontrol edin. Başarılı testten sonraki adım, kullandığınız programlama dilinde dosyayı binary modda okuyup SQL sorgusuna parametre olarak göndermektir.
BLOB’un kapasitesi karakter sayısıyla değil, bayt sayısıyla değerlendirilir. MySQL’de dört temel BLOB türü vardır:
| Tür | Türün teorik üst sınırı | Uygun kullanım |
|---|---|---|
| TINYBLOB | 255 bayt | Çok küçük ikili değerler |
| BLOB | 65.535 bayt | Küçük dosyalar veya ikili alanlar |
| MEDIUMBLOB | 16.777.215 bayt | Daha büyük dosyalar |
| LONGBLOB | 4.294.967.295 bayt | Büyük medya veya arşiv verileri |
Bu sınırlar teorik tür sınırlarıdır. Gerçek kullanılabilir boyut; sunucu ayarları, istemci bağlantısı, tablo motoru, disk alanı ve uygulamanın bellek kullanımına bağlı olarak daha düşük olabilir. Büyük dosyaları veritabanına koymak yerine dosya sistemi veya nesne depolama alanında tutup veritabanında yalnızca dosya yolu, kimlik, MIME türü ve boyut bilgisini saklamak çoğu uygulamada daha kolay yönetilir.
Hangi BLOB türünü seçmelisiniz?
Dosyanın en büyük olası boyutunu ve veritabanının operasyonel sınırlarını birlikte değerlendirin. Boyutu küçük ve kesin olan bir değer için
TINYBLOB, yaklaşık 64 KB’a kadar içerik için BLOB, daha büyük içerikler için MEDIUMBLOB veya LONGBLOB seçilebilir. LONGBLOB seçmek her satır için üst sınır kadar alan ayırmak anlamına gelmez. Yedekleme ve aktarım yükünde esas belirleyici saklanan gerçek içerik miktarıdır; ayrıca uygulamanın kabul edeceği dosya boyutunu sınırlandırın.Dosya adı, MIME türü, yükleme zamanı ve içerik özeti gibi aranacak alanları ayrı sütunlarda tutun. BLOB’un kendisi üzerinde sık arama yapmak yerine bu metadata sütunlarını sorgulayın. Dosyayı kullanıcıya sunarken içerik türünü yalnız kullanıcının bildirdiği MIME değerinden türetmeyin; dosyayı doğrulayıp gereken erişim denetimini uygulayın. Ardından uygun içerik türüyle yanıtlayın; dosya içeriğini
HEX veya Base64’e çevirerek saklamak çoğu durumda gereksiz alan tüketir.Sık yapılan hatalar
- Resim veya PDF’yi
VARCHARiçine metin gibi kaydetmek, ikili verinin bozulmasına yol açabilir. - BLOB kapasitesini karakter sayısı sanmak yanlıştır; ölçüm bayt üzerinden yapılır.
- Her dosyayı veritabanına koymak yedekleme ve trafik yükünü büyütebilir.
- Uygulama tarafında dosyayı string olarak yanlış kodlamak, veritabanı türü doğru olsa bile içeriği bozabilir.
- BLOB sütununu liste sorgularında gereksiz yere seçmek, büyük verinin taşınmasına neden olur. Liste ekranlarında yalnız metadata alın, içeriği ihtiyaç olduğunda ayrı sorgulayın.
Sık sorulan sorular
BLOB ile TEXT arasındaki temel fark nedir?
TEXT karakter verisi içindir ve karakter kümesi kurallarına tabidir. BLOB ise ham baytları saklar; dosya gibi ikili içerikler için uygundur.