国際化に対応した Transact-SQL ステートメントの記述Write International Transact-SQL Statements

適用対象: ○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

以下のガイドラインに従うと、 Transact-SQLTransact-SQL ステートメントを使用するデータベースやデータベース アプリケーションをある言語から別の言語に移行することが容易になり、複数の言語をサポートできます。Databases and database applications that use Transact-SQLTransact-SQL statements will become more portable from one language to another, or will support multiple languages, if the following guidelines are followed:

  • SQL Server 2019 (15.x)SQL Server 2019 (15.x) 以降および Azure SQL データベースAzure SQL Database では、次のいずれかを使用します。Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x) and in Azure SQL データベースAzure SQL Database, use either:

    • charvarcharvarchar(max) の各データ型では UTF-8 対応の照合順序が使用され、データは UTF-8 を使用してエンコードされます。The char, varchar, and varchar(max) data types with a UTF-8 enabled collation, and data is encoded using UTF-8.
    • ncharnvarcharnvarchar(max) の各データ型では補助文字 (SC) 対応の照合順序が使用され、データは UTF-16 を使用してエンコードされます。The nchar, nvarchar, and nvarchar(max) data types with supplementary character (SC) enabled collation, and data is encoded using UTF-16. SC 以外の照合順序を使用すると、データは UCS-2 を使用してエンコードされます。Using a non-SC collation results in data being encoded using UCS-2.

    これによりコード ページ変換の問題を回避できます。This avoids code page conversion issues. 他の考慮事項については、「UTF-8 と UTF-16 でのストレージの相違点」をご覧ください。For other considerations, see Storage differences between UTF-8 and UTF-16.

  • SQL Server 2017 (14.x)SQL Server 2017 (14.x) までは、charvarcharvarchar(max) の各データ型を使用しているすべての個所をそれぞれ ncharnvarcharnvarchar(max) データ型に置き換えます。Up to SQL Server 2017 (14.x)SQL Server 2017 (14.x), replace all uses of the char, varchar, and varchar(max) data types with nchar, nvarchar, and nvarchar(max). 補助文字 (SC) 対応の照合順序を使用する場合、データは UTF-16 を使用してエンコードされます。If using a supplementary character (SC) enabled collation, data is encoded using UTF-16. SC 以外の照合順序を使用すると、データは UCS-2 を使用してエンコードされます。Using a non-SC collation results in data being encoded using UCS-2. これによりコード ページ変換の問題を回避できます。This avoids code page conversion issues. 詳細については、「 Collation and Unicode Support」を参照してください。For more information, see Collation and Unicode Support.

    重要

    text データ型は非推奨で、新しい開発作業では使用できません。The text data type is deprecated and should not be used in new development work. text データの varchar(max) への変換を検討してください。Plan to convert text data to varchar(max).

  • 月単位または曜日単位で比較や操作を行う場合、名前の文字列ではない数字の日付要素を使用します。When doing month and day-of-week comparisons and operations, use the numeric date parts instead of the name strings. 言語設定が異なると、月や曜日の名前が異なります。Different language settings return different names for the months and weekdays. たとえば、DATENAME(MONTH,GETDATE()) は、言語の設定が英語 (U.S.) になっていれば May を返します。設定がドイツ語になっていれば Mai、フランス語になっていれば mai を返します。For example, DATENAME(MONTH,GETDATE()) returns May when the language is set to U.S. English, returns Mai when the language is set to German, and returns mai when the language is set to French. 代わりに、DATEPART のような関数を使用すると、月の名前の代わりに数字が返されます。Instead, use a function such as DATEPART that uses the number of the month instead of the name. 多くの場合、日付を数字で表記するよりも名前で表記する方がよりわかりやすくなるので、ユーザーに表示する結果セットを構築するときは、DATEPART 名を使用してください。Use the DATEPART names when you build result sets to be displayed to a user, because the date names are frequently more meaningful than a numeric representation. ただし、特定の言語の表示名に依存するロジックはコーディングしないでください。However, don't code any logic that depends on the displayed names being from a specific language.

  • 日付を比較する場合、または INSERT ステートメントまたは UPDATE ステートメントで日付を指定する場合は、どの言語設定でも同じ解釈が行われる制約を使用します。When you specify dates in comparisons or for input to INSERT or UPDATE statements, use constants that are interpreted the same way for all language settings:

    • ADO、OLE DB、および ODBC アプリケーションでは、以下に示す ODBC タイムスタンプ、日付、時刻のエスケープ句を使用する必要があります。ADO, OLE DB, and ODBC applications should use the ODBC timestamp, date, and time escape clauses of:

      { ts' yyyy - mm - dd hh : mm : ss [ . fff] '} 、例: { ts'1998-09-24 10:02:20'}{ ts' yyyy - mm - dd hh : mm : ss [.fff] '} such as: { ts'1998-09-24 10:02:20'}

      { d' yyyy - mm - dd '} 、例: { d'1998-09-24'}{ d' yyyy - mm - dd '} such as: { d'1998-09-24'}

      { t' hh : mm : ss '} 、例: { t'10:02:20'}{ t' hh : mm : ss '} such as: { t'10:02:20'}

    • 他の API、または Transact-SQLTransact-SQL スクリプト、ストアド プロシージャ、およびトリガーを使用するアプリケーションでは、区切られていない数字列を使用してください。Applications that use other APIs, or Transact-SQLTransact-SQL scripts, stored procedures, and triggers, should use the unseparated numeric strings. たとえば、 yyyymmdd には 19980924 を使用します。For example, yyyymmdd as 19980924.

    • 他の API、または Transact-SQLTransact-SQL スクリプト、ストアド プロシージャ、トリガーを使用するアプリケーションでは、time 型、date 型、smalldate 型、datetime 型、datetime2 型、datetimeoffset のデータ型と文字列データ型間の変換にはすべて、明示的なスタイル パラメーターを指定して CONVERT ステートメントを使用してください。Applications that use other APIs, or Transact-SQLTransact-SQL scripts, stored procedures, and triggers should use the CONVERT statement with an explicit style parameter for all conversions between the time, date, smalldate, datetime, datetime2, and datetimeoffset data types and character string data types. たとえば、次のステートメントは、すべての言語または日付形式の接続設定で同じように解釈されます。For example, the following statement is interpreted in the same way for all language or date format connection settings:

      SELECT *  
      FROM AdventureWorks2012.Sales.SalesOrderHeader  
      WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)  
      

参照See also

CAST および CONVERT (Transact-SQL) CAST and CONVERT (Transact-SQL)
DATEPART (Transact-SQL) DATEPART (Transact-SQL)
照合順序と Unicode のサポートCollation and Unicode Support