web-dev-qa-db-ja.com

テーブル/データベースの文字セットを決定しますか?

SQL Serverでテーブルまたはデータベースの文字セットを見つけるために実行できるT-SQLコマンドは何ですか?

編集:サーバーのバージョン:Microsoft SQL Server 2008 R2(RTM)-10.50.1600.1(X64)

17
shealtiel

を使用してバージョンを確認できます

SELECT @@VERSION;

9.00以上の場合、次を使用して列の照合を確認できます。

SELECT collation_name FROM sys.columns 
WHERE name = 'column name'
AND [object_id] = OBJECT_ID('dbo.table name');

そして、データベースを使用して

SELECT collation_name FROM sys.databases 
WHERE name = 'database name';

9.0未満の場合は、SQL Server 2000以前を使用しています。 2000では、同様の列を確認できると思います(例:syscolumns.collationid列の場合)。

22
Aaron Bertrand

文字セットは、列のデータ型によって異なります。このSQLを使用して、データベース内の列に使用される文字セットと照合順序を知ることができます。

select data_type, character_set_catalog, character_set_schema, character_set_name, collation_catalog, collation_schema, collation_name, count(*) count
from information_schema.columns
group by data_type, character_set_catalog, character_set_schema, character_set_name, collation_catalog, collation_schema, collation_name;

デフォルトの文字セットを使用している場合、charおよびvarcharデータ型のcharacter_set_nameはiso_1(ISO 8859-1)でなければなりません。 ncharおよびnvarcharはUCS-2形式でUnicodeデータを格納するため、これらのデータ型のcharacter_set_nameはUNICODEです。

14

SQL Serverの照合順序を確認するには、SQL Server Management Studioでこれを実行します(データベース名を適切な場所に配置します)

SELECT DATABASEPROPERTYEX('DatabaseNameGoeshere', 'Collation') DatabaseCollation;

照合設定は各レベルに設定できることに注意してください

サーバ

SELECT SERVERPROPERTY('Collation')  as ServerCollation

データベース

SELECT DATABASEPROPERTYEX('DatabaseNameGoeshere', 'Collation') DatabaseCollation;

列(SQL Svr 2005以降)

Select TABLE_NAME, COLUMN_NAME, Columns.COLLATION_NAME
From INFORMATION_SCHEMA.COLUMNS

列(SQL Svr 2005より低い)

SELECT name, collation_name
FROM syscolumns
WHERE OBJECT_ID IN 
(
    SELECT OBJECT_ID
    FROM sysobjects
    WHERE type = 'U'
    AND name = 'TableNameGoesHere'
)
AND name = 'ColumnNameGoesHere'
9
Raj More