Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

BLOB varchar

Îåêßíçóå áðü ôï ìÝëïò m6s. Τελευταία δημοσίευση από το μέλος m6s στις 28-05-2010, 00:46. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-05-2010, 14:54 58838

    BLOB varchar

    Καλησπέρα....δεν έχω καταλάβει καλά, το VARCHAR ήρθε μετά το BLOB (ιστορικά); Και είναι για να αντικαταστήσει το BLOB ?
    Η απορία προκύπτει σε μια γραμμή που έχεις 8KB max μέγεθος ( σωστά; ), μπορείς να χώσεις στο BLOB όσο μεγάλου μέγέθους θές πληροφορία;
    Το πρόβλημα είναι θέλω να καταχωρήσω κείμενο 2000 λέξεων! σε ένα πεδίο. Το οποίο πεδίο είναι σε πίνακα που ήδη είναι στα όρια του ώς προς το όριο που θέτει ο "σκηνοθέτης". Δεν μπορώ να καταχωρήσω μια παραπομπή, θέλω το ίδιο το κείμενο.
    Any Idea ?
  •  27-05-2010, 15:39 58843 σε απάντηση της 58838

    Απ: BLOB varchar

    Το BLOB και το (Ν)VARCHAR δεν έχουν καμμία σχέση μεταξύ τους. Το (Ν)VARCHAR είναι ένα string μεταβλητού μήκους με άνω όριο τα 8000 bytes. Αυτό σημαίνει ότι ένα πεδίο nvarchar το οποίο περιέχει unicode χαρακτήρες φτάνει μέχρι τους 4000 χαρακτήρες. Από την άλλη, το BLOB δεν είναι τύπος του SQL αλλά αναφέρεται σε τύπους οι οποίοι αποθηκεύουν binary δεδομένα μεγέθους μέχρι 2 GB. Ο αντίστοιχος τύπος είναι ο image (μέχρι τον SQL 2005) και πλέον varbinary(max). Αν θέλεις να αποθηκεύσεις text μεγάλου μεγέθους, θα πρέπει να χρησιμοποιήσεις τον τύπο ntext (μέχρι 2005) ή nvarchar(max) (2008 και μετά).
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-05-2010, 15:43 58844 σε απάντηση της 58838

    Απ: BLOB varchar

    Δεν ξέρω ποιο ήρθε πρώτο, σίγουρα όμως το varchar δεν ήρθε για να να αντικαταστήσει το BLOG. Το 1ο είναι για κείμενο, το δεύτερο είναι για binary data.
    Για πιο ολοκληρωμένη μελέτη των ορίων του sql server 2008 δες εδώ. Ως προς ποιο πράγμα ακριβώς ο πίνακάς σου είναι στα όριά του;
    Το όριο για varchar είναι 8000 bytes, όχι 8KB. Λεπτομέρεια, αλλά είπα να κάνω τον έξυπνο!!! Big Smile. Αυτό σημαίνει 8000 characters για varchar και 4000 characters για nvarchar (μια που αυτό είναι unicode και θέλει 2 bytes per character).
    Οι 2000 λέξεις που λες φυσικά δεν λένε τίποτα. Σημασία έχει πόσα characters είναι.
    Αν δεν σε ενδιαφέρει το κείμενο να είναι searchable με την LIKE μπορείς να χρησιμοποιήσεις binary τύπους δεδομένων (binary, varbinary, image) που δεν έχουν αυτούς τους περιορισμούς των 8000 bytes. Αν πάλι θέλεις να είναι searchable ένα κείμενο που φτάνει τα 8000 bytes έτσι κι αλλιώς δεν είναι και το καλύτερο πράγμα!
    Θα σου πρότεινα να σκεφτείς σοβαρά (και να μεταφέρεις τους προβληματισμούς σε όποιον παίρνει τις αποφάσεις γι αυτό το σχήμα της βάσης) να σπάσεις τον πίνακα σε περισσότερους από ένα.

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  27-05-2010, 15:59 58846 σε απάντηση της 58844

    Απ: BLOB varchar

    Αναφέρομαι στο "Bytes per row : 8060" σημείο. Τέτοιο μήνυμα το έχω δεί στο σχεδιασμό μέσα απο το studio. Και ναι, και γω το πιστεύω ότι ο πίνακας πρέπει να σπάσει.
    Σκεφτόμουνα το varbinary(blob), με σκοπό να αποθηκεύσω εκεί αυτού του είδους τα κείμενα. Δεν χρειάζομαι να κάνω αναζήτηση πάνω σε αυτά. Και αν χρειαζόμουνα θα έφτιαχνα μια λύση με κώδικα ( Regexp ) για να κάνει αναζήτηση ο χρήστης.

    Ευχαριστώ για τις απαντήσεις σας και τους δυο. Κατατοπιστικότατες!



  •  27-05-2010, 16:07 58848 σε απάντηση της 58846

    Απ: BLOB varchar

    Το πόσα bytes χωράνε σε ένα row δεν έχει σχέση με το μήκος του πεδίου. Σημαίνει απλά ότι δεν μπορείς να έχεις πεδία των οποίων το συνολικό μέγεθος ξεπερνάει τα 8000 bytes. Αν χρησιμοποιήσεις nvarchar(max) ή nvarbinary(max) δεν υπάρχει αυτός ο περιορισμός. 

    Τέλος, δεν υπάρχει λόγος να σπάσει ο πίνακας απλά και μόνο επειδή χρησιμοποιείς κάποιο από τα blob πεδία (nvarchar(max), nvarbinary(max)). 

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-05-2010, 16:17 58850 σε απάντηση της 58848

    Απ: BLOB varchar

    Η βασική διαφορά μεταξύ των (n)text, image και (n)varchar(max) , varbinary(max) έχει να κάνει για το πως τελικα αποθηκεύεται η πληροφορία.

    Εάν χρησιμοποιείς τα πρώτα text,image, τότε γίνεται το εξής στο record μπαίνει ένας pointer που δείχνει σε ένα δεντρο από pages στο datafile τις οποίες τις λεμε blob pages και φυσικά δεσμέυεται και ακόμα μια σελίδα για το πεδίο αυτό. Ενω από χρησιμοποιείς τα (max) τότε το περιεχόμενο αν χωράει να μπει στην σελίδα που υπάρχει όλο το record θα μπει εκει αλλιώς θα φτίαξει το tree.

    τώρα αν θέλεις να δεις γιατι είναι 8060 το record len κοίτα αυτό. Απλά πρέπει να τονίζω ότι και αυτό είναι λίγο ρευστό κάποια στιγμή θα πρέπει να το γράψω άρθρο αλλά είναι λίγο περίεργο ...

    Συμφωνώ με τον Πάνο ότι δεν χρειάζεται να σπάσει ο πίνακας 


    Antonios Chatzipavlis

  •  27-05-2010, 16:39 58851 σε απάντηση της 58850

    Απ: BLOB varchar

    1. Αν βλέπεις το προειδοποιητικό μήνυμα στο design του πίνακα δεν θα έπρεπε να με ανησυχεί ; Εχω την εντύπωση οτι δεν είναι ευέλικτο. Δεν θα μπορώ να προσθέσω κάποια πεδία ακόμα αν χρειαστεί. Αλλά και απο τεχνική αποψη, δεν είναι στα όρια ;

    2. Αν χωράει, μπαίνει όλη η πληροφορία στη σελίδα. Οκ. Αν τα data αλλάξουν και ποιά δεν χωράει τίποτα, να υποθέσω φτιάχνει το δέντρο έπειτα. Σωστά;

    3. 8060 το καταλαβαίνω και απο το σύνδεσμο αυτό, σούπερ. Αυτό που εγώ θα ρώταγα όμως, είναι γιατί υπάρχει ο περιορισμός των 8092; Και δεν μπορεί να είναι μεγαλύτερο; Επειδή το είδα και σε φόρουμ για την InnoDB της φίλτατης MySQL, είναι κάποιος "χρυσός αριθμός";
     http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html

  •  27-05-2010, 19:15 58854 σε απάντηση της 58851

    Απ: BLOB varchar

    Αν μπορώ να καταλάβω μιλας για το warning που  σου βγάζει. Αν μιλάς για αυτό δεν υπάρχει πρόβλημα. Δυνητικα σε έναν πίνακα μπορείς να έχει μέχρι 1024 πεδία αρκεί το μήκος της εγγραφής να μην είναι πάνω από 8060 bytes. Εδώ τώρα είναι λίγο περίπλοκα τα πράγματα και υπάρχουν περιπτώσεις που μπορεί να έχεις εν δυνάμει μικρότερο μήκος εγγραφής σε συνάρτηση με το πλήθος των variable lenght fields. Είναι αυτό που σου είπα και πριν ότι είναι λίγο περίεργο. Θα το εξηγήσω όμως στο μέλλον με ένα post στο blog μου.

    Τώρα αν έχεις (n)varchar(max) και έχεις φτάσει στα όρια του μήκους της εγγραφής τότε είναι σίγουρο ότι αυτά τα πεδία θα είναι σε ξεχωριστά pages.

    Τεχνικά τωρα. Θα σε παραπεμψω πάλι σε ενα παλιό άρθρο μου http://autoexec.gr/blogs/antonch/archive/2009/10/07/19198.aspx Το οποίο θα σου λύσει τις απορίες σου.

    Η απάντηση μου για το δεύτερο ερώτημα σου είναι ότι σωστα το έχεις σκεφτεί.

    Φιλικά


    Antonios Chatzipavlis

  •  28-05-2010, 00:46 58857 σε απάντηση της 58854

    Απ: BLOB varchar

    Σε ευχαριστώ, πραγματικά αρκετά διαφωτιστική η όλη συζήτηση.

    Με εκτίμηση
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems