2011-09-06 69 views
15

在SQL Server中可以运行什么T-SQL命令来查找表或数据库的字符集?确定表/数据库的字符集?

编辑: Server版本:Microsoft SQL Server的2008 R2(RTM) - 10.50.1600.1(X64)

+0

运行SQL Server Management Studio并运行'Select @@ Verion'来检查SQL Server的版本。 –

+0

请参阅'DATABASEPROPERTYEX'和'SERVERPROPERTY' – Lijo

回答

20

可以使用检查版本

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列)。

8

要检查的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 

SELECT name, collation_name 
FROM syscolumns 
WHERE OBJECT_ID IN 
(
    SELECT OBJECT_ID 
    FROM sysobjects 
    WHERE type = 'U' 
    AND name = 'TableNameGoesHere' 
) 
AND name = 'ColumnNameGoesHere' 
+0

我收到空作为响应。这是什么意思? – shealtiel

+0

您是否在查询中放入了适当的数据库名称? –

+0

'sys.columns'和'sys.objects'无效

12

的字符集取决于列的数据类型(比SQL Svr的2005以下)。你可以使用什么样的使用此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; 

如果它使用默认的字符集,CHARACTER_SET_NAME应ISO_1(ISO 8859- 1)用于char和varchar数据类型。由于nchar和nvarchar以UCS-2格式存储Unicode数据,因此这些数据类型的character_set_name是UNICODE。