Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Rögzített méretű, karakteresvagy változóméretű karakter adattípus, varchar. Az SQL Server 2019-től kezdve (15.x) az UTF-8-kompatibilis rendezés használatakor ezek az adattípusok a Unicode karakteradatok teljes tartományát tárolják, és az UTF-8 karakterkódolást használják. Ha nem UTF-8 rendezés van megadva, akkor ezek az adattípusok csak a rendezés megfelelő kódlapja által támogatott karakterek egy részét tárolják.
Arguments
char [ ( n ) ]
Rögzített méretű sztringadatok.
n bájtban határozza meg a sztring méretét, és 1 és 8000 közötti értéknek kell lennie. Az egybájtos kódolású karakterkészletek(például Latin) esetében a tárterület n bájt, és a tárolható karakterek száma is n. Többbájtos kódolású karakterkészletek esetén a tárterület mérete továbbra is n bájt, de a tárolható karakterek száma kisebb lehet, mint n. A karakter ISO-szinonimája karakter. További információ a karakterkészletekkel kapcsolatban: Single-Byte és többbájtos karakterkészletek.
varchar [ ( n | max ) ]
Változó méretű sztringadatok. Az n használatával határozza meg a sztring méretét bájtokban, és 1 és 8000 közötti érték lehet, vagy maximális használatával jelezheti az oszlopkényszer méretét legfeljebb 2^31-1 bájt (2 GB) vagy 1 MB-os maximális tárterületig a Fabric Data Warehouse-ban. Az olyan egybájtos kódolású karakterkészletek esetében, mint a Latin, a tárterület n bájt + 2 bájt, és a tárolható karakterek száma is n. Többbájtos kódolású karakterkészletek esetén a tárterület mérete továbbra is n bájt + 2 bájt, de a tárolható karakterek száma kisebb lehet, mint n. A varchar ISO-szinonimái karakter változó vagy karaktert. További információ a karakterkészletekkel kapcsolatban: Single-Byte és többbájtos karakterkészletek.
Remarks
Gyakori tévhit, hogy karakter (n) és varchar (n)esetében az n határozza meg a karakterek számát. Azonban karakter (n) és varchar(n)esetében az n határozza meg a sztring hosszát bájtban (0–8 000). n soha nem határoz meg tárolható karakterek számát. Ez a fogalom hasonlít az nchar és az nvarchardefiníciójára.
A tévhit azért fordul elő, mert egybájtos kódolás használatakor a karakter és a varchar tárolási mérete n bájt, és a karakterek száma is n. A többbájtos kódolás , például UTF-8esetén azonban a magasabb Unicode-tartományok (128–1114 1111) egy karaktert eredményeznek két vagy több bájt használatával. Egy karakter(10)nevű oszlopban például az adatbázismotor 10 karaktert tárolhat, amelyek egybájtos kódolást használnak (Unicode-tartomány 0 és 127 között), de többbájtos kódolás esetén kevesebb mint 10 karaktert (Unicode-tartomány: 128–1114,111). További információ a Unicode-tárterületről és a karaktertartományokról: Az UTF-8 és az UTF-16közötti tárolási különbségek.
Ha n nincs megadva adatdefinícióban vagy változódeklarációs utasításban, az alapértelmezett hossz 1. Ha n nincs megadva a CAST és CONVERT függvény használatakor, az alapértelmezett hossz 30.
A karaktert vagy varchar használó objektumok az adatbázis alapértelmezett rendezési pontját kapják meg, kivéve, ha egy adott rendezés van hozzárendelve a COLLATE záradék használatával. A rendezés szabályozza a karakteradatok tárolására használt kódlapot.
Az SQL Server többbájtos kódolásai a következők:
Kétbájtos karakterkészletek (DBCS) egyes kelet-ázsiai nyelvekhez a 936 és a 950 (kínai), a 932 (japán) vagy a 949 (koreai) kódlap használatával.
UTF-8 a 65001 kódlappal.
A következőkre vonatkozik: SQL Server 2019 (15.x) és újabb verziók.
Ha több nyelvet támogató webhelyei vannak:
- Az SQL Server 2019 -től kezdve (15.x) fontolja meg az UTF-8-kompatibilis rendezés használatát a Unicode támogatásához és a karakterkonvertálási problémák minimalizálásához.
- Ha az SQL Server adatbázismotor egy korábbi verzióját használja, fontolja meg a Unicode nchar vagy nvarchar adattípus használatát a karakterkonvertálási problémák minimalizálása érdekében.
Ha karakteres vagy varcharhasznál, a következőket javasoljuk:
- Ha az oszlopadat-bejegyzések mérete konzisztens, használja karakteres.
- Használjon varchar, ha az oszlopadat-bejegyzések mérete jelentősen eltér.
- Használjon varchar(max), ha az oszlopadat-bejegyzések mérete jelentősen eltér, és a sztring hossza meghaladhatja a 8000 bájtot.
Ha SET ANSI_PADDINGOFF vagy CREATE TABLE végrehajtásakor ALTER TABLE, a definiált NULL oszlop varchar.
Warning
Minden nem null értékű varchar(max) vagy nvarchar(max) oszlophoz 24 bájt további rögzített foglalás szükséges, amely egy rendezési művelet során a 8060 bájtos sorkorlátnak felel meg. Ez implicit korlátot hozhat létre a táblában létrehozható nem null varchar(max) vagy nvarchar(max) oszlopok számára.
A tábla létrehozásakor (a szokásos figyelmeztetésen túl, hogy a maximális sorméret meghaladja a megengedett maximális 8060 bájtot) vagy az adatbeszúráskor nem jelenik meg különleges hiba. Ez a nagy sorméret hibákat (például 512-es hibát) okozhat bizonyos normál műveletek során, például fürtözött indexkulcs-frissítés vagy a teljes oszlopkészlet rendezése során, amelyek csak egy művelet végrehajtásakor fordulnak elő.
Karakteradatok konvertálása
Ha a karakterkifejezések más méretű karakteradat-típussá alakulnak, a rendszer csonkolja az új adattípushoz túl hosszú értékeket. A uniqueidentifier típus karaktertípusnak minősül egy karakterkifejezésből való átalakítás céljából, és így a karaktertípussá való konvertálás csonkítási szabályaira is vonatkozik. Lásd a Példák szakaszt.
Ha egy karakterkifejezést más adattípusú vagy méretű karakterkifejezéssé alakít át, például karakter(5)varchar(5), vagy karakter(20)karakter(15), a bemeneti érték rendezése hozzá lesz rendelve az átalakított értékhez. Ha egy nemcharacter-kifejezés karakteradattípussá alakul át, az aktuális adatbázis alapértelmezett rendezése a konvertált értékhez lesz rendelve. Mindkét esetben hozzárendelhet egy adott rendezést a COLLATE záradék használatával.
Note
A kódlapfordítások karakteres és varchar adattípusok esetében támogatottak, a szöveges adattípus esetében azonban nem. Az SQL Server korábbi verzióihoz hasonlóan a kódlapfordítások során nem jelent adatvesztést a rendszer.
A közelítő numerikus adattípussá konvertált karakterkifejezések tartalmazhatnak nem kötelező exponenciális jelölést. Ez a jelölés kisbetűs e vagy nagybetűs E, amelyet egy opcionális plusz (+) vagy mínusz (-) jel, majd egy szám követ.
A pontos numerikus adattípussá konvertált karakterkifejezéseknek számjegyekből, tizedesvesszőből és opcionális pluszból (+) vagy mínuszból (-) kell állniuk. A rendszer figyelmen kívül hagyja a kezdő üreseket. A vesszőelválasztók, például a 123,456.00több ezer elválasztója, nem engedélyezettek a sztringben.
A pénz vagy kisvállalati adattípussá konvertált karakterkifejezések tartalmazhatnak választható tizedesjelet és dollárjelet ($). A $123,456.00-hez hasonlóan vesszőelválasztók is engedélyezettek.
Amikor egy üres sztring intlesz, az értéke 0lesz. Amikor egy üres sztringet dátummá konvertálnak, az értéke dátum lesz , amely 1900-01-01.
Examples
A. A változódeklarációban használt n alapértelmezett értékének megjelenítése
Az alábbi példában az n alapértelmezett értéke 1 a karakter és varchar adattípushoz, amikor változódeklarációban használják.
DECLARE @myVariable AS VARCHAR = 'abc';
DECLARE @myNextVariable AS CHAR = 'abc';
--The following query returns 1
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);
GO
B. A n alapértelmezett értékének megjelenítése, ha a varchart a CAST és a CONVERT használatával használják
Az alábbi példa azt mutatja, hogy az n alapértelmezett értéke 30, amikor a karakter vagy varchar adattípust használja a CAST és CONVERT függvényekhez.
DECLARE @myVariable AS VARCHAR(40);
SET @myVariable = 'This string is longer than thirty characters';
SELECT CAST(@myVariable AS VARCHAR);
SELECT DATALENGTH(CAST(@myVariable AS VARCHAR)) AS 'VarcharDefaultLength';
SELECT CONVERT(CHAR, @myVariable);
SELECT DATALENGTH(CONVERT(CHAR, @myVariable)) AS 'VarcharDefaultLength';
C. Adatok konvertálása megjelenítési célokra
Az alábbi példa két oszlopot alakít át karaktertípusokká, és egy olyan stílust alkalmaz, amely egy adott formátumot alkalmaz a megjelenített adatokra. A pénz típus karakteradatokká és stílus 1 lesz alkalmazva, amely a tizedesponttól balra három számjegyenként vesszővel, a tizedesvessző jobb oldalán pedig két számjegygel jeleníti meg az értékeket. A datetime típus karakteradatokká alakul, és a stílus 3 lesz alkalmazva, amely dd/mm/yyformátumban jeleníti meg az adatokat. A WHERE záradékban egy pénz típus karaktertípusra kerül a sztring-összehasonlító művelet végrehajtásához.
USE AdventureWorks2022;
GO
SELECT BusinessEntityID,
SalesYTD,
CONVERT(VARCHAR(12), SalesYTD, 1) AS MoneyDisplayStyle1,
GETDATE() AS CurrentDate,
CONVERT(VARCHAR(12), GETDATE(), 3) AS DateDisplayStyle3
FROM Sales.SalesPerson
WHERE CAST(SalesYTD AS VARCHAR(20)) LIKE '1%';
Itt van az eredmények összessége.
BusinessEntityID SalesYTD DisplayFormat CurrentDate DisplayDateFormat
---------------- --------------------- ------------- ----------------------- -----------------
278 1453719.4653 1,453,719.47 2011-05-07 14:29:01.193 07/05/11
280 1352577.1325 1,352,577.13 2011-05-07 14:29:01.193 07/05/11
283 1573012.9383 1,573,012.94 2011-05-07 14:29:01.193 07/05/11
284 1576562.1966 1,576,562.20 2011-05-07 14:29:01.193 07/05/11
285 172524.4512 172,524.45 2011-05-07 14:29:01.193 07/05/11
286 1421810.9242 1,421,810.92 2011-05-07 14:29:01.193 07/05/11
288 1827066.7118 1,827,066.71 2011-05-07 14:29:01.193 07/05/11
D. Uniqueidentifier-adatok konvertálása
Az alábbi példa egy uniqueidentifier értéket alakít át karakter adattípussá.
DECLARE @myid UNIQUEIDENTIFIER = NEWID();
SELECT CONVERT(CHAR(255), @myid) AS 'char';
Az alábbi példa az adatok csonkolását mutatja be, ha az érték túl hosszú ahhoz, hogy az adattípust átalakítsa. Mivel a uniqueidentifier típus legfeljebb 36 karakter hosszúságú lehet, az ilyen hosszúságú karakterek csonkolt lesznek.
DECLARE @ID NVARCHAR(MAX) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';
SELECT @ID, CONVERT(UNIQUEIDENTIFIER, @ID) AS TruncatedValue;
Itt van az eredmények összessége.
String TruncatedValue
------------------------------------------ ------------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0