Ist es nur, dass nvarchar
unterstützt Multibyte-Zeichen? Wenn das der Fall ist, gibt es dann wirklich einen Grund, abgesehen von Speicherproblemen, für die Verwendung von varchars
?
Antworten
Zu viele Anzeigen?Ich habe mir die Antworten angeschaut und viele scheinen zu empfehlen, die nvarchar
en varchar
Da der Speicherplatz kein Problem mehr darstellt, kann es nicht schaden, Unicode zu aktivieren, um etwas zusätzlichen Speicherplatz zu gewinnen. Nun, das stimmt nicht immer, wenn Sie einen Index auf Ihre Spalte anwenden wollen. SQL Server hat ein Limit von 900 Bytes für die Größe des Feldes, das Sie indizieren können. Wenn Sie also eine varchar(900)
können Sie sie immer noch indizieren, aber nicht varchar(901)
. Mit nvarchar
wird die Anzahl der Zeichen halbiert, so dass Sie bis zu nvarchar(450)
. Wenn Sie also zuversichtlich sind, brauchen Sie keine nvarchar
empfehle ich nicht, sie zu verwenden.
Im Allgemeinen empfehle ich bei Datenbanken, sich an die Größe zu halten, die Sie benötigen, denn Sie können sie jederzeit erweitern. Ein Arbeitskollege meinte zum Beispiel einmal, dass es nicht schadet, wenn man nvarchar(max)
für eine Spalte, da wir überhaupt kein Problem mit der Speicherung haben. Später, als wir versuchten, einen Index auf diese Spalte anzuwenden, lehnte SQL Server dies ab. Wenn er jedoch auch mit varchar(5)
Wir hätten sie später einfach auf den von uns benötigten Umfang erweitern können, ohne ein solches Problem zu haben, das uns dazu zwingen wird, einen Feldmigrationsplan zu erstellen, um dieses Problem zu lösen.
Jeffrey L Whitledge mit ~47000 Reputationspunkten empfiehlt die Verwendung von nvarchar
Solomon Rutzky mit ~33200 Reputationspunkten empfiehlt: Verwenden Sie NICHT immer NVARCHAR. Das ist eine sehr gefährliche und oft kostspielige Einstellung / Vorgehensweise.
https://www.sqlservercentral.com/articles/disk-is-cheap-orly-4
Was wählt ein lernender Sql-Server-Datenbankentwickler, wenn beide Personen ein so hohes Ansehen genießen?
In den Antworten und Kommentaren wird häufig vor Leistungsproblemen gewarnt, wenn Sie Ihre Auswahl nicht konsequent treffen.
Es gibt Kommentare pro/contra nvarchar für die Leistung.
Es gibt Kommentare pro/contra varchar für die Leistung.
Ich habe eine besondere Anforderung für eine Tabelle mit vielen hundert Spalten, was an sich wahrscheinlich ungewöhnlich ist ?
Ich entscheide mich für varchar, um die 8060-Byte-Grenze für Tabellendatensätze von SQL*server 2012 nicht zu überschreiten.
Die Verwendung von nvarchar überschreitet für mich diese 8060 Byte Grenze.
Ich denke auch, dass ich die Datentypen der verwandten Codetabellen an die Datentypen der primären zentralen Tabelle anpassen sollte.
Ich habe die Verwendung von varchar-Spalten an meinem Arbeitsplatz, der südaustralischen Regierung, durch erfahrene Datenbankentwickler gesehen, wo die Anzahl der Tabellenzeilen mehrere Millionen oder mehr betragen wird (und nur sehr wenige nvarchar-Spalten, wenn überhaupt, in diesen sehr großen Tabellen), so dass vielleicht das erwartete Datenzeilenvolumen Teil dieser Entscheidung ist.
Ich muss an dieser Stelle sagen (mir ist klar, dass ich mir wahrscheinlich eine Standpauke anhören muss!), dass der einzige Zeitpunkt, an dem NVARCHAR
ist eigentlich mehr nützlich (beachten Sie die mehr dort!) als VARCHAR
ist, wenn alle Sortierreihenfolgen auf allen abhängigen Systemen und in der Datenbank selbst gleich sind...? Wenn dies nicht der Fall ist, muss die Kollationskonvertierung ohnehin erfolgen und macht somit VARCHAR
genau so lebensfähig wie NVARCHAR
.
Hinzu kommt, dass einige Datenbanksysteme, wie z. B. SQL Server (vor 2012) haben eine Seitengröße von ca. 8K. Wenn Sie also durchsuchbare Daten speichern wollen, die nicht in einer Datei wie TEXT
o NTEXT
Feld dann VARCHAR
bietet den vollen Platz von 8k, während NVARCHAR
bietet nur 4k (doppelte Bytes, doppelter Platz).
Zusammenfassend lässt sich sagen, dass die Verwendung von beidem davon abhängt:
- Projekt oder Kontext
- Infrastruktur
- Datenbank-System
Folgen Sie Unterschied zwischen Sql Server VARCHAR und NVARCHAR Datentyp . Hier können Sie auf sehr anschauliche Weise sehen.
Im Allgemeinen speichert nvarchar Daten als Unicode. Wenn Sie also mehrsprachige Daten (mehr als eine Sprache) in einer Datenspalte speichern möchten, benötigen Sie die Variante N.
nvarchar
ist sicher in der Anwendung im Vergleich zu varchar
um unseren Code fehlerfrei zu machen (Typ-Fehlanpassung), denn nvarchar
erlaubt auch Unicode-Zeichen. Wenn wir where
Bedingung in der SQL Server-Abfrage und wenn wir die =
Operator, wird es manchmal einen Fehler geben. Der wahrscheinliche Grund dafür ist, dass unsere Mapping-Spalte in varchar
. Wenn wir es definiert haben in nvarchar
darf dieses Problem nicht auftreten. Dennoch bleiben wir bei varchar
und dieses Problem zu vermeiden, verwenden wir besser LIKE
Schlüsselwort und nicht =
.
- See previous answers
- Weitere Antworten anzeigen