web-dev-qa-db-fra.com

déterminer le jeu de caractères d'une table / base de données?

Quelle commande T-SQL peut être exécutée pour rechercher le jeu de caractères d'une table ou d'une base de données dans SQL Server?

modifier: version du serveur: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)

17
shealtiel

Vous pouvez vérifier la version en utilisant

SELECT @@VERSION;

Si c'est 9.00 ou plus, vous pouvez vérifier le classement d'une colonne en utilisant

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

Et pour la base de données utilisant

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

Si c'est <9.0 alors vous utilisez SQL Server 2000 ou inférieur. Pour 2000, je pense que vous pouvez vérifier des colonnes similaires (par exemple syscolumns.collationid pour les colonnes).

22
Aaron Bertrand

Le jeu de caractères dépend du type de données d'une colonne. Vous pouvez vous faire une idée des jeux de caractères utilisés pour les colonnes d'une base de données ainsi que des classements à l'aide de ce 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;

S'il utilise le jeu de caractères par défaut, le caractère_set_name doit être iso_1 (ISO 8859-1) pour les types de données char et varchar. Étant donné que nchar et nvarchar stockent les données Unicode au format UCS-2, le caractère_set_name pour ces types de données est UNICODE.

14

Pour vérifier le classement de SQL Server, exécutez-le dans SQL Server Management Studio (mettez le nom de votre base de données à l'endroit approprié)

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

Notez que les paramètres de classement peuvent être définis à chaque nivea

Serveur

SELECT SERVERPROPERTY('Collation')  as ServerCollation

Base de données

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

Colonne (SQL Svr 2005 ou supérieur)

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

Colonne (inférieure à 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