Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

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.

  1. 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
    );
  2. Örnek ikili veriyi ekleyin:
    Kod:
    INSERT INTO medya (dosya_adi, mime_turu, icerik)
    VALUES ('ornek.bin', 'application/octet-stream', UNHEX('FFD8FFE0'));
  3. 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ürTürün teorik üst sınırıUygun kullanım
TINYBLOB255 baytÇok küçük ikili değerler
BLOB65.535 baytKüçük dosyalar veya ikili alanlar
MEDIUMBLOB16.777.215 baytDaha büyük dosyalar
LONGBLOB4.294.967.295 baytBü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 VARCHAR iç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.

Bir BLOB sütununda dosya adı da saklanır mı?​

BLOB yalnızca içeriği saklar. Dosya adı, MIME türü ve benzeri bilgileri ayrı sütunlarda tutmak daha doğru ve sorgulanabilir bir tasarımdır.

BLOB içindeki dosya doğrudan tarayıcıda açılır mı?​

Hayır. Uygulamanın BLOB verisini okuyup uygun HTTP içerik türüyle yanıtlaması gerekir. Tarayıcının dosyayı görüntüleyip indirmesi, gönderilen içerik türü ve yanıt başlıklarına bağlıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic