|
|
Δημοσιεύτηκε στις 13/6/2018 11:07:11 π.μ.
|
|
|

Πρώτον, το varchar(max) είναι ένα υποκατάστατο του τύπου δεδομένων κειμένου που χρησιμοποιείται από τη Microsoft,Οι παλαιότεροι τύποι πεδίων, όπως το κείμενο, ενδέχεται να ακυρωθούν σε επόμενες εκδόσεις。 Έτσι, τι κείμενο μπορεί να αποθηκευτεί, το varchar( max) μπορεί σίγουρα να αποθηκευτεί. Στην πραγματικότητα, ο αριθμός των χαρακτήρων που μπορεί να αποθηκεύσει είναι πολύ μεγάλος. Οι 420 εκατομμύρια χαρακτήρες που μπορούν να αποθηκευτούν είναι δύσκολο να προσεγγιστούν, κάτι που πιστεύω ότι είναι δύσκολο να προσεγγιστεί.
Ήξερα μόνο πρινΤο κείμενο και η εικόνα είναι τύποι δεδομένων που ενδέχεται να είναι παρωχημένοι από τον SQL Server, αλλά ο συγκεκριμένος λόγος δεν είναι ξεκάθαρος, όταν διάβασα σήμερα, βρήκα τη διαφορά μεταξύ κειμένου και varchar(max) και nvarchar(max), κυρίως λόγω του περιορισμού των τελεστών, το κείμενο μπορεί να χρησιμοποιηθεί μόνο από τις ακόλουθες συναρτήσεις:
| λειτουργία | Δήλωση | | ΜΉΚΟΣ ΔΕΔΟΜΈΝΩΝ | ΑΝΑΓΝΩΣΜΕΝΟ ΚΕΙΜΕΝΟ | | PATINDEX | ΟΡΙΣΜΌΣ ΜΕΓΈΘΟΥΣ ΚΕΙΜΈΝΟΥ | | ΥΠΟΣΥΜΒΟΛΟΣΕΙΡΆ | ΕΝΗΜΕΡΩΣΗΚΕΙΟ | | TEXTPTR | ΓΡΑΠΤΌ ΚΕΊΜΕΝΟ | | ΚΕΊΜΕΝΟΈΓΚΥΡΟ | |
Για παράδειγμα, εάν ο τύπος δεδομένων της στήλης "Κείμενο" είναι κείμενο, τότε δεν μπορεί να χρησιμοποιηθεί για λειτουργίες όπως "=" και "left()", όπως το ακόλουθο παράδειγμα:
Δημιουργήστε έναν πίνακα και συμπληρώστε τα δεδομένα:
αν υπάρχει (επιλέξτε * από sysobjects όπου id = OBJECT_ID('[asdf]') και OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [asdf]
ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ [asdf] (
[inttest] [int] ΤΑΥΤΌΤΗΤΑ (1, 1) ΌΧΙ NULL ,
[κείμενο] [κείμενο] NULL ,
[varcharmax] varchar(max) NULL )
ΑΛΛΑΓΗ ΠΙΝΑΚΑ [asdf] ΜΕ NOCHECK ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ [PK_asdf] ΠΡΩΤΕΥΟΝ ΚΛΕΙΔΙ ΜΗ ΟΜΑΔΟΠΟΙΗΜΕΝΟ ( [inttest] )
ΡΥΘΜΊΣΤΕ IDENTITY_INSERT [ASDF] ΕΝΕΡΓΟΠΟΙΗΜΈΝΟ
ΕΙΣΑΓΩΓΗ [asdf] ( [inttest] , [text] , [varcharmax] ) ΤΙΜΕΣ ( 1 , '1111111' , '1111111' )
ΑΠΕΝΕΡΓΟΠΟΙΉΣΤΕ IDENTITY_INSERT [ASDF]
Εκτελέστε το ερώτημα:
Έρευνα 1: SELECT [κείμενο]
,[varcharmax]
ΑΠΟ [testDB]. [dbo]. [ΑΣΔΦ]
όπου
[text] ='11111' ΚΑΙ
[varcharmax] = '1111111'
Εμφανίζεται το ακόλουθο μήνυμα σφάλματος:
Μήνυμα 402, Επίπεδο 16, Κατάσταση 1, Γραμμή 1
Οι τύποι δεδομένων text και varchar δεν είναι συμβατοί στον τελεστή equal to.
Έρευνα 2: SELECT [κείμενο]
,[varcharmax]
ΑΠΟ [testDB]. [dbo]. [ΑΣΔΦ]
όπου
[varcharmax] = '1111111'
μπορεί να εκτελεστεί με επιτυχία
Σε MS SQL2005 και άνω, προσθέστε τύπους δεδομένων μεγάλης αξίας (varchar(max), nvarchar(max), varbinary(max)). Ο τύπος δεδομένων μεγάλης τιμής μπορεί να αποθηκεύσει έως και 2^30-1 byte δεδομένων.
Αυτοί οι τύποι δεδομένων είναι συμπεριφορικά πανομοιότυποι με τους μικρότερους τύπους δεδομένων varchar, nvarchar και varbinary.
Ο ισχυρισμός της Microsoft είναι να αντικαταστήσει τους προηγούμενους τύπους δεδομένων κειμένου, ntext και εικόνας με αυτόν τον τύπο δεδομένων και η αντιστοιχία μεταξύ τους είναι:
varchar(max)-------κείμενο;
nvarchar(max)-----ntext;
varbinary(max)----εικόνα.
Με τύπους δεδομένων μεγάλης αξίας, είναι πολύ πιο ευέλικτο να εργάζεστε με δεδομένα μεγάλης αξίας από πριν. Για παράδειγμα, το κείμενο δεν μπορεί να χρησιμοποιηθεί "μου αρέσει" πριν, αλλά μετά το varchar(max), δεν υπάρχουν αυτά τα προβλήματα, επειδή το varchar(max) είναι το ίδιο με το varchar(n) στη συμπεριφορά, οπότε αυτό που μπορεί να χρησιμοποιηθεί στο varcahr μπορεί να χρησιμοποιηθεί στο varchar(max).
Επιπλέον, αυτό υποστηρίζει τη χρήση εναυσμάτων AFTER σε αναφορές στηλών τύπου δεδομένων μεγάλης τιμής σε πίνακες που έχουν εισαχθεί και διαγραφεί. Το κείμενο δεν είναι καλό, με λίγα λόγια, μετά τη χρήση του τύπου δεδομένων μεγάλης αξίας, είμαι "η μέση μου δεν πονάει πια, τα πόδια μου δεν πονάνε και μπορώ να ανέβω στον έκτο όροφο με μια ανάσα". Τι περιμένετε, χρησιμοποιήστε τον τύπο μεγάλης αξίας.
|
Προηγούμενος:Α-χα, ε-χα, ε-χαΕπόμενος:Το EF (έκφραση λάμδα) υποβάλλει ερωτήματα σε διάφορες εξαιρέσεις που συναντώνται στα δεδομένα
|