SQL-kiszolgáló - mi a különbség char, nchar, varchar és nvarchar között sql-ben
Csak tisztázzam. vagy összefoglalni.
- A nchar és a nvarchar képes Unicode karaktereket tárolni.
- char és varchar nem tárolhat Unicode karaktereket.
- char és nchar rögzített hosszúságú, amely az Ön által megadott összeget tárolja, még akkor is, ha nem használja ezt a helyet.
- varchar és nvarchar változó hosszúságú, amelyek csak a tárolt karakterek számára szóközöket használnak. Nem tárolja a tárolást, például char vagy nchar.
A nchar és a nvarchar kétszer annyi tárhelyet foglal el, ezért elővigyázatos, ha csak Unicode támogatásra van szüksége.
válasz érkezett Brian Kim 04 okt. 17-kor 18: 50-kor
a char és a varchar nem a Unicode tárolására szolgál, de néhány további kódolási trükkökkel és további logikával a char [var] mezőt használhatja az unicode tárolására. - Wim ten Brink 04 okt. 17-kor 18: 50-kor
Attól függ, hogy az n verzió rendelkezésre áll-e. vegye kétszer a tárhelyet, amit a válaszom mutat - Martin Smith október 04. 17-kor 18: 50-kor
Mi az előnye a tárhely fenntartásának? - mlissner 04 okt 17-kor 18: 50-kor
Az utolsó bekezdésben: Az Unicode nchar és a nvarchar használata a legtöbb esetben még jobb, javítja a feltérképezést, rugalmasságot a felhasználók számára, és kiküszöböli a jövő kompatibilitási problémáit. Egyébként a tárolóhely nem jelent problémát ebben az esetben, mert a Unicode nélkül történő rendezés nagy baj, és a jövőben a memória mennyisége tovább fog csökkenni - Jaison Varghese október 04. 17-kor 18: 50-kor
Valójában sem a char / varchar, sem a nchar / nvarchar nem tárolhatja a Unicode karakterek teljes skáláját, ezért félrevezető mondani, hogy Unicode karaktereket tárolhat, a másik pedig nem. Fix kétbájtos kódolás (az SQL Server ezt az UCS-2 nevű kódolást használja a nchar és a nvarchar esetében) nem elég nagy ahhoz, hogy fedezze a Unicode teljes körét. További részletekért lásd: Válasz. - PeterAllenWebb 04 okt. 17-kor 18: 50-kor
+1 ha mindez igaz - kta 04 oct. 17-kor 18: 50-kor
Az [n] varchar számára azonban rögzített hosszúságú karakterláncokat tárolhat, például varchar (20). Mi a különbség a char (20) és a varchar (20) között? - Ben Caine 04 okt. 17-kor 18: 50-kor
@BenCaine char (20) 20 bájtot használ (a 8 bites rendezés feltételei mellett); A varchar (20) len (adatot) +2 bájtot használ, azaz 22 a 20 bájtnyi adat, de csak 12 adat 10 bájtra. A további két bájt a hosszúságú rekord. Ha az adatok mindig teljes hosszúságúak, használja a szimbólumot, mert helyet takarít meg, és gyorsabb lehet. Kérem, soha ne használjon varcharot (1), vagy akár kevesebbet is, mint a varchar (4). Egy varchar-formátumú karakter három bájtot használ, így a char (3) soha nem fog több helyet használni, mint a varchar (3). - Richard Gadsden október 04 17-kor 18: 50-kor
@RichardGadsden Az üres varchar (3) vonal kevesebb helyet foglal el, mint az üres char (3) karakterlánc? 2 bájt, illetve 3 bájt? - andrewb 04 okt. 17-kor 18: 50-kor
Az @andrewb technikailag, de általában egy nulla, ami egyáltalán nem egy byte. - Richard Gadsden október 04 17-kor 18: 50-kor
Az egyetlen eset, hogy én tennék, hogy amikor megpróbálja áthelyezni az adatokat a program (pl asp.net web API) az SQL-szerver, és van egy sor oszlopok char, ez lehetővé teszi, hogy frissítse vagy helyezzen be semmilyen az aktuális típus. Függetlenül attól, hogy ez hibás vagy még mindig mondható-e, hogy átadja a karakterláncot. A példa az "StateAbbrv char (2)" mező a kiszolgálón és a nyilvános string StateAbbrv az alkalmazásban. - Edward 04 okt. 17-kor 18: 50-kor
Megpróbáltam általánosíthatja és korrigálni a meglévő válaszokat:
Először is, char és nchar mindig egy rögzített memória mennyiségét, akkor is, ha a húr a menteni kívánt, kevésbé rendelkezésre álló helyet, míg a varchar és nvarchar fogja használni csak az azonos mennyiségű tárhelyet tárolásához szükséges ez a sztring (plusz két byte-overhead adatokat, feltételezhetően a húr hossza tárolására). Tehát ne feledje, hogy a "var" jelentése "változó", mint egy változó térben.
A második fontos pont, hogy megértsék, hogy nchar és nvarchar tárolni húrok segítségével pontosan két bájtot karakter, míg a char és varchar használja a kódolás által meghatározott rendezési kódlapjának, amely rendszerint pontosan egy byte-ot karakter (bár alább). Két bájt per karakter, akkor tárolja a nagyon sokféle karakter, így a legfontosabb dolog, hogy emlékezzen az, hogy nchar és nvarchar sokkal jobb választás, ha szeretné, hogy támogassák nemzetközivé, akkor valószínűleg igen.
Most még néhány vékony pontot.
Először is, a nchar és a nvarchar oszlopok mindig az UCS-2 használatával tárolják az adatokat. Ez azt jelenti, hogy karakterenként pontosan két bájt fog kerülni, és az alapszintű többnyelvű síkon (BMP) bármely Unicode karakter menthető a nchar vagy a nvarchar mezőbe. Azonban bármilyen Unicode karaktert nem lehet menteni. Például a Wikipedia szerint az egyiptomi hieroglifák kódpontjai túlmutatnak a BMP-n. Így az Unicode-karakterláncok az UTF-8-ban és az Unicode-kódolásban nem szerepelhetnek az SQL Server nchar vagy a nvarchar mezőben. és az egyiptomi hieroglifákban írt sorok lesznek közöttük. Szerencsére a felhasználók valószínűleg nem írni ezt a szkriptet, de emlékezned kell erre!
Peter AllenWebb által adott válasz: 04 okt. 17-kor 18: 50-kor
- char. rögzített hosszúságú, legfeljebb 8000 karakter hosszúságú karakteradatok.
- nchar. Unicode rögzített hosszúságú, maximum 4000 karakter hosszúságú adatok.
- = 8 bit hosszúságú
- = 16 bit hosszúságú
a választ a ss. Október 04 17-kor 18: 50-kor
nchar határozott hosszúságú és unicode karaktereket tartalmazhat. két karakter bájtot használ minden karakter számára.
A varchar hossza változó, és nem tartalmazhat Unicode karaktereket. minden karakterhez egy bájtnyi tárhelyet használ.
válaszolt Manu 04 okt. 17-kor 18: 50-kor
Rossz. A Unicode minden karakterhez 1-4 bájtot (általában) használhat. Ezenkívül a varchar tartalmazhat unicode-t, de nem ismerik unicode-ként. Ennek eredményeképpen a varchar megbízhatatlan az unicode tárolására. (Ezenkívül fennáll annak a veszélye, hogy a mezőhöz hozzáférő kód nem fogja megfelelően lefordítani). - Wim ten Brink 04 okt. 17-kor 18: 50-kor
@Alex: Azt hiszem, kifejezte álláspontját, de még mindig nem értek egyet veled. Azt mondja, hogy az int CAN hosszú ideig tart, ha a hosszú méret kevesebb, mint 2 ^ 32. Ez nem csak "megbízhatatlan", hanem egy inherens korlátozás, amely lehetetlenné teszi az egész értéktartományt. - Manu 04 okt. 17-kor 18: 50-kor
Az NVARCHAR képes tárolni Unicode karaktereket, és karakterenként 2 bájtot vesz igénybe.
válaszolt Gustavo Rubio 04 okt. 17-kor 18: 50-kor
Rossz! A Unicode karakterenként 1-4 bájtot használ! Sokan elfelejtik! Még az UTF-16 használatával is előfordulhat, hogy egyes karakterek 2 bájt helyett 4 bájtot okoznak, bár a teljes hossza 2 bájt. Néhány más Unicode alformátum több mint 4 bájtot foglalhat el! - Wim ten Brink 04 okt. 17-kor 18: 50-kor
@WimtenBrink - Az SQL Server és a nvarchar kérdése mindig karakterenként 2 bájtot tartalmaz. - Martin Smith október 04 17-kor 18: 50-kor
- A repository mérete n bájt.
- A szimbólum ISO szinonimája szimbólum.
Összefoglalásként jutottunk el. Mert nem adtunk meg egy hosszúságot char számára. Az alapértelmezett hossza 1 lesz.
- Stringes adatok változó hosszúságúak, nem Unicode.
- n határozza meg a húr hosszát, és értéke 1-8000 lehet.
- A max azt jelzi, hogy a maximális tárolási méret 2 ^ 31-1 byte (2 GB).
- A repository mérete a megadott adatok tényleges hossza + 2 byte.
- A varcharnak az ISO szinonimái eltérő karaktert vagy karaktert tartalmaznak.
- Unicode karakterláncok rögzített hosszúságú adatokkal.
- n meghatározza a húr hosszát, és értéke 1 és 4000 között van.
- Szinonimák Az ISO a nchar számára nemzeti szimbólum és nemzeti jelleg.
nvarchar [(n | max)]
- String adatok Unicode változó hosszúságú.
- n meghatározza a húr hosszát, és értéke 1 és 4000 között lehet.
- A max azt jelzi, hogy a maximális tárolási méret 2 ^ 31-1 byte (2 GB).
- A nvarchar ISO-szinonimái nemzeti jellegűek és eltérő nemzeti jellegűek.
válaszadva vikram reddy 04 okt. 17-kor 18: 50-kor