char および varchar (Transact-SQL)char and varchar (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

固定サイズ (char)、または可変サイズ (varchar) の文字データ型です。Character data types that are either fixed-size, char, or variable-size, varchar. SQL Server 2019SQL Server 2019 以降、UTF-8 が有効になっている照合順序を使用する場合、これらのデータ型には Unicode 文字データの全範囲が格納され、UTF-8 文字エンコードが使用されます。Starting with SQL Server 2019SQL Server 2019, when a UTF-8 enabled collation is used, these data types store the full range of Unicode character data and use the UTF-8 character encoding. UTF-8 が無効の照合順序を指定する場合、これらのデータ型には、対応するその照合順序のコード ページでサポートされている文字のサブセットのみが格納されます。If a non-UTF-8 collation is specified, then these data types store only a subset of characters supported by the corresponding code page of that collation.

引数Arguments

char [ ( n ) ] 固定サイズの文字列データです。char [ ( n ) ] Fixed-size string data. n によってバイト単位での文字列のサイズが定義されます。1 から 8,000 までの値にする必要があります。n defines the string size in bytes and must be a value from 1 through 8,000. Latin などの 1 バイト エンコード文字セットの場合、ストレージのサイズは n バイトとなり、格納できる文字数もまた n となります。For single-byte encoding character sets such as Latin, the storage size is n bytes and the number of characters that can be stored is also n. マルチバイト エンコード文字セットの場合、ストレージのサイズは引き続き n バイトですが、格納できる文字数が n よりも少なくなる場合があります。For multibyte encoding character sets, the storage size is still n bytes but the number of characters that can be stored may be smaller than n. char の ISO シノニムは、character です。The ISO synonym for char is character. 文字セットについて詳しくは、「1 バイト文字セットとマルチバイト文字セット」をご覧ください。For more information on character sets, see Single-Byte and Multibyte Character Sets.

varchar [ ( n | max ) ] 可変サイズの文字列データです。varchar [ ( n | max ) ] Variable-size string data. n (1 から 8,000 の値を指定可能) を使用して文字列のサイズをバイト単位で定義するか、または max を使用して列の制約サイズが最大ストレージである 2^31-1 バイト (2 GB) までであることを指定します。Use n to define the string size in bytes and can be a value from 1 through 8,000 or use max to indicate a column constraint size up to a maximum storage of 2^31-1 bytes (2 GB). Latin などの 1 バイト エンコード文字セットの場合、ストレージのサイズは n バイト + 2 バイトとなり、格納できる文字数もまた n となります。For single-byte encoding character sets such as Latin, the storage size is n bytes + 2 bytes and the number of characters that can be stored is also n. マルチバイト エンコード文字セットの場合、ストレージのサイズは引き続き n バイト + 2 バイトですが、格納できる文字数が n よりも少なくなる場合があります。For multi-byte encoding character sets, the storage size is still n bytes + 2 bytes but the number of characters that can be stored may be smaller than n. varchar の ISO シノニムは、charvarying または charactervarying です。The ISO synonyms for varchar are charvarying or charactervarying. 文字セットについて詳しくは、「1 バイト文字セットとマルチバイト文字セット」をご覧ください。For more information on character sets, see Single-Byte and Multibyte Character Sets.

RemarksRemarks

一般的な誤解として、CHAR(n) および VARCHAR(n) では n によって文字数が定義されると考えられています。A common misconception is to think that CHAR(n) and VARCHAR(n), the n defines the number of characters. 実際には、CHAR(n) および VARCHAR(n) では、n によって文字長がバイト (0-8,000) で定義されます。But in CHAR(n) and VARCHAR(n) the n defines the string length in bytes (0-8,000). n は、格納できる文字数を定義しません。n never defines numbers of characters that can be stored. これは、NCHAR(n) および NVARCHAR(n) の定義と同様です。This is similar to the definition of NCHAR(n) and NVARCHAR(n).
この誤解が生じるのは、1 バイト エンコードを使用すると、CHAR と VARCHAR の格納サイズが n バイトとなり、文字の数も n となるためです。The misconception happens because when using single-byte encoding, the storage size of CHAR and VARCHAR is n bytes and the number of characters is also n. しかしながら、UTF-8 などのマルチバイト エンコードの場合、より高い Unicode 範囲 (128-1,114,111) では 1 文字に 2 バイト以上が使用されることになります。However, for multi-byte encoding such as UTF-8, higher Unicode ranges (128-1,114,111) result in one character using two or more bytes. たとえば、CHAR(10) として定義された列では、データベース エンジンDatabase Engineで格納できる文字は、1 バイト エンコード (Unicode 範囲 0-127) を使用する文字は 10 個ですが、マルチバイト エンコード (Unicode 範囲 128-1,114,111) を使用する場合は 10 個未満です。For example, in a column defined as CHAR(10), the データベース エンジンDatabase Engine can store 10 characters that use single-byte encoding (Unicode range 0-127), but less than 10 characters when using multi-byte encoding (Unicode range 128-1,114,111). Unicode の格納と文字の範囲の詳細については、「UTF-8 と UTF-16 でのストレージの相違点」を参照してください。For more information about Unicode storage and character ranges, see Storage differences between UTF-8 and UTF-16.

データ定義または変数宣言ステートメントで n を指定しないと、既定の長さは 1 になります。When n isn't specified in a data definition or variable declaration statement, the default length is 1. CAST 関数および CONVERT 関数で n を指定しないと、既定の長さは 30 になります。If n isn't specified when using the CAST and CONVERT functions, the default length is 30.

COLLATE 句で特定の照合順序を指定しない限り、char 型または varchar 型を使用するオブジェクトにはデータベースの既定の照合順序が割り当てられます。Objects that use char or varchar are assigned the default collation of the database, unless a specific collation is assigned using the COLLATE clause. 照合順序によって、文字型データの格納に使用されるコード ページが制御されます。The collation controls the code page that is used to store the character data.

SQL ServerSQL Server のマルチバイト エンコードには以下が含まれます。Multibyte encodings in SQL ServerSQL Server include:

  • 一部の東アジア言語に向けた 2 バイト文字セット (DBCS)。コード ページ 936 および 950 (中国語)、932 (日本語)、または 949 (韓国語) を使用します。Double-byte character sets (DBCS) for some East Asian languages using code pages 936 and 950 (Chinese), 932 (Japanese), or 949 (Korean).
  • コード ページ 65001 を使用する UTF 8。UTF-8 with code page 65001. 適用対象: SQL ServerSQL Server (SQL Server 2019SQL Server 2019 以降)Applies to: SQL ServerSQL Server (Starting with SQL Server 2019SQL Server 2019))

複数言語をサポートするサイトがある場合:If you have sites that support multiple languages:

  • SQL Server 2019SQL Server 2019 以降、Unicode をサポートして文字変換の問題を最小限に抑えるために、UTF-8 が有効になっている照合順序の使用を検討してください。Starting with SQL Server 2019SQL Server 2019, consider using a UTF-8 enabled collation to support Unicode and minimize character conversion issues.
  • 下位バージョンの SQL Server データベース エンジンSQL Server Database Engine を使用する場合、文字変換の問題を最小限に抑えるために、Unicode の nchar データ型または nvarchar データ型を使用することを検討してください。If using a lower version of the SQL Server データベース エンジンSQL Server Database Engine, consider using the Unicode nchar or nvarchar data types to minimize character conversion issues.

char 型または varchar 型を使用する場合は、次のことをお勧めします。If you use char or varchar, we recommend to:

  • 列データ エントリのサイズが一定の場合は、char を使用します。Use char when the sizes of the column data entries are consistent.
  • 列データ エントリのサイズが大幅に変化する場合は、varchar を使用します。Use varchar when the sizes of the column data entries vary considerably.
  • 列データ エントリのサイズが大幅に変化し、かつ文字列の長さが 8,000 バイトを超える可能性がある場合は、varchar(max) を使用します。Use varchar(max) when the sizes of the column data entries vary considerably, and the string length might exceed 8,000 bytes.

CREATE TABLE または ALTER TABLE 実行時に SET ANSI_PADDING が OFF に設定されている場合、NULL として定義されている char 型の列は varchar 型として扱われます。If SET ANSI_PADDING is OFF when either CREATE TABLE or ALTER TABLE is executed, a char column that is defined as NULL is handled as varchar.

警告

Null 以外の varchar(max) または nvarchar(max) の各列には、24 バイトの追加の固定割り当てが必要で、これは並べ替え操作中の 8,060 バイトの行制限におけるカウント対象となります。Each non-null varchar(max) or nvarchar(max) column requires 24 bytes of additional fixed allocation which counts against the 8,060 byte row limit during a sort operation. これにより、テーブル内に作成できる Null 以外の varchar(max) または nvarchar(max) の列数について、暗黙的な制限が生じます。This can create an implicit limit to the number of non-null varchar(max) or nvarchar(max) columns that can be created in a table.
テーブルの作成時やデータ挿入時に、最大行サイズが許容最大値の 8,060 バイトを超えるという通常の警告以外の、特別なエラーは提供されません。No special error is provided when the table is created (beyond the usual warning that the maximum row size exceeds the allowed maximum of 8,060 bytes) or at the time of data insertion. この大きな行サイズが原因で、クラスター化インデックス キーの更新や列セット全体の並べ替えなどの通常操作の一部でエラー (エラー 512 など) が発生する可能性があります。これは操作を実行するまでユーザーは予測できます。This large row size can cause errors (such as error 512) during some normal operations, such as a clustered index key update, or sorts of the full column set, which users can anticipate until performing an operation.

文字データの変換Converting Character Data

文字式を異なるサイズの文字型に変換する場合、値が新しいデータ型に長すぎる場合は、切り捨てられます。When character expressions are converted to a character data type of a different size, values that are too long for the new data type are truncated. uniqueidentifier 型は、文字式からの変換のための文字型と見なされるため、文字型に変換する場合は切り捨てのルールが適用されます。The uniqueidentifier type is considered a character type for the purposes of conversion from a character expression, and so is subject to the truncation rules for converting to a character type. 例については、後の「例」のセクションを参照してください。See the Examples section that follows.

文字式がデータ型やサイズが異なる文字式に変換される場合 (char(5) から varchar(5) や、char(20) から char(15) など)、入力値の照合順序が変換後の値に割り当てられます。When a character expression is converted to a character expression of a different data type or size, such as from char(5) to varchar(5), or char(20) to char(15), the collation of the input value is assigned to the converted value. 文字式でない式が文字型に変換される場合、現在のデータベースの既定の照合順序が変換後の値に割り当てられます。If a noncharacter expression is converted to a character data type, the default collation of the current database is assigned to the converted value. どちらの場合でも、COLLATE 句を使用して特定の照合を割り当てることができます。In either case, you can assign a specific collation by using the COLLATE clause.

注意

コード ページ変換は char および varchar データ型に対してはサポートされていますが、text データ型に対してはサポートされていません。Code page translations are supported for char and varchar data types, but not for text data type. 以前のバージョンの SQL ServerSQL Server と同様に、コード ページの変換中のデータの損失は報告されません。As with earlier versions of SQL ServerSQL Server, data loss during code page translations isn't reported.

近似の数値データ型に変換される文字式には、オプションで指数表記を含めることができます。Character expressions that are being converted to an approximate numeric data type can include optional exponential notation. この表記は、オプションでプラス (+) またはマイナス (-) 記号、次いで数字が続く、小文字の e または大文字の E です。This notation is a lowercase e or uppercase E followed by an optional plus (+) or minus (-) sign and then a number.

文字式を正確な numeric 型に変換する場合、その文字式は、数字と小数点から構成されている必要があります。必要に応じて、プラス記号 (+) またはマイナス記号 (-) を付けることができます。Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). 先頭の空白は無視されます。Leading blanks are ignored. 123,456.00 の千の区切り記号など、コンマ区切りの記号は、文字列内で使用できません。Comma separators, such as the thousands separator in 123,456.00, aren't allowed in the string.

文字式を money 型または smallmoney 型に変換する場合、その文字式も、小数点とドル記号 ($) を含むことができます。Character expressions being converted to money or smallmoney data types can also include an optional decimal point and dollar sign ($). $123,456.00 のようにコンマを区切り記号として使用できます。Comma separators, as in $123,456.00, are allowed.

使用例Examples

A.A. 変数宣言で使用された場合の n の既定値Showing the default value of n when used in variable declaration.

次の例は、char データ型および varchar データ型が変数宣言で使用された場合に、n の既定値が 1 になることを示しています。The following example shows the default value of n is 1 for the char and varchar data types when they are used in variable declaration.

DECLARE @myVariable AS varchar = 'abc';  
DECLARE @myNextVariable AS char = 'abc';  
--The following returns 1  
SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);  
GO  

B.B. CAST および CONVERT と共に varchar が使用された場合の n の既定値。Showing the default value of n when varchar is used with CAST and CONVERT.

次の例は、char データ型または varchar データ型が CAST 関数および CONVERT 関数と共に使用された場合に、n の既定値が 30 になることを示しています。The following example shows that the default value of n is 30 when the char or varchar data types are used with the CAST and CONVERT functions.

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.C. 表示用にデータを変換するConverting Data for Display Purposes

次の例では、2 つの列を文字型に変換し、表示されるデータに特定の形式を適用するスタイルを指定します。The following example converts two columns to character types and applies a style that applies a specific format to the displayed data. money 型は文字データに変換され、スタイル 1 が適用されます。それによって、整数部分は 3 桁ごとにコンマで区切られ、小数点以下は 2 桁までの値が表示されます。A money type is converted to character data and style 1 is applied, which displays the values with commas every three digits to the left of the decimal point, and two digits to the right of the decimal point. datetime 型は文字データに変換され、スタイル 3 が適用されます。それによって、dd/mm/yy の形式でデータが表示されます。A datetime type is converted to character data and style 3 is applied, which displays the data in the format dd/mm/yy. WHERE 句の money 型は文字タイプにキャストされ、文字列比較操作が実行されます。In the WHERE clause, a money type is cast to a character type to perform a string comparison operation.

USE AdventureWorks2012;  
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%';  

以下に結果セットを示します。Here is the result set.

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.D. Uniqueidentifier 型データを変換するConverting Uniqueidentifer Data

次の例では、uniqueidentifier 型の値を char 型の値に変換します。The following example converts a uniqueidentifier value to a char data type.

DECLARE @myid uniqueidentifier = NEWID();  
SELECT CONVERT(char(255), @myid) AS 'char';  

次の例は、変換後のデータ型に対して値が長すぎる場合のデータの切り捨てを示します。The following example demonstrates the truncation of data when the value is too long for the data type being converted to. uniqueidentifier 型は 36 文字に制限されているため、この長さを超える文字は切り捨てられます。Because the uniqueidentifier type is limited to 36 characters, the characters that exceed that length are truncated.

DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';  
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;  

以下に結果セットを示します。Here is the result set.

String                                       TruncatedValue  
-------------------------------------------- ------------------------------------  
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong    0E984725-C51C-4BF4-9960-E1C80E27ABA0  
  
(1 row(s) affected)  

参照See also

nchar および nvarchar (Transact-SQL)nchar and nvarchar (Transact-SQL)
CAST および CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
COLLATE (Transact-SQL)COLLATE (Transact-SQL)
データ型の変換(Transact-SQL)Data Type Conversion (Database Engine)
データ型 (Transact-SQL)Data Types (Transact-SQL)
データベース サイズの見積もり Estimate the Size of a Database
照合順序と Unicode のサポート Collation and Unicode Support
1 バイト文字セットとマルチバイト文字セットSingle-Byte and Multibyte Character Sets