21

What T-SQL command can be run to find character set of a table or database in SQL Server?

edit: Server version: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)

shealtiel
  • 7,480
  • 17
  • 48
  • 81

3 Answers3

27

You can check the version using

SELECT @@VERSION;

It it's 9.00 or greater, you can check the collation of a column using

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

And for the database using

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

If it's < 9.0 then you're using SQL Server 2000 or lower. For 2000 I believe you can check similar columns (e.g. syscolumns.collationid for columns).

Aaron Bertrand
  • 261,961
  • 36
  • 448
  • 471
  • This works well for me; note the `collation_name` can tell you which "code page" is being used, [as seen here](https://stackoverflow.com/a/5039321/1175496). For example if the `collation_name` value is "SQL_Latin1_General_CP1_CI_AS", note that: > CP1 stands for Code Page 1252 – The Red Pea Jan 23 '21 at 02:47
15

The character set depends on the data type of a column. You can get an idea of what character sets are used for the columns in a database as well as the collations using this 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;

If it's using the default character set, the character_set_name should be iso_1 (ISO 8859-1) for the char and varchar data types. Since nchar and nvarchar store Unicode data in UCS-2 format, the character_set_name for those data types is UNICODE.

Rob at TVSeries.com
  • 2,178
  • 1
  • 18
  • 15
10

To check the Collation of SQL Server run this in SQL Server Management Studio (put your database name in the appropriate place)

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

Note that Collation settings can be set each level

Server

SELECT SERVERPROPERTY('Collation')  as ServerCollation

Database

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

Column (SQL Svr 2005 or higher)

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

Column (lower than 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'
Raj More
  • 45,769
  • 31
  • 127
  • 192