【问题标题】:determining the character set of a table / database?确定表/数据库的字符集?
【发布时间】:2011-11-11 09:05:19
【问题描述】:

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

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

【问题讨论】:

  • 运行 SQL Server Management Studio 并运行 Select @@Verion 以检查 SQL Server 的版本。
  • 参考DATABASEPROPERTYEXSERVERPROPERTY

标签: sql-server sql-server-2008-r2 collation


【解决方案1】:

您可以使用

查看版本
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';

如果它 syscolumns.collationid 用于列)。

【讨论】:

  • 这对我很有效;请注意collation_name 可以告诉您正在使用哪个“代码页”as seen here。例如,如果collation_name 的值为“SQL_Latin1_General_CP1_CI_AS”,请注意: > CP1 代表 Code Page 1252
【解决方案2】:

字符集取决于列的数据类型。您可以了解数据库中的列使用了哪些字符集以及使用此 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。

【讨论】:

    【解决方案3】:

    要检查 SQL Server 的排序规则,请在 SQL Server Management Studio 中运行(将您的数据库名称放在适当的位置)

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

    请注意,Collat​​ion 设置可以设置每个级别

    服务器

    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'
    

    【讨论】:

    • 我收到 null 作为响应。这是什么意思?
    • 您是否在查询中输入了适当的数据库名称?
    • sys.columnssys.objects 无效
    • 找到了一些官方信息的链接(注意:for sql server 2012):technet.microsoft.com/en-us/library/hh230914.aspx
    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多