Megosztás a következőn keresztül:


karakter és varchar (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-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