接受的答案是误导性的,但这部分是由于问题本身含糊不清(尽管可能不是故意)。
是的,任何Unicode字符串(即文字与N
,或XML
和N
-prefixed变量前缀),当存储将隐式转换为8位ASCII一个CHAR
/VARCHAR
/TEXT
(不要使用这一个!)领域。 但是,这在许多情况下可能是一个相当重要的区别,只有在U + 0000到U + 007F范围内的Unicode码点(即ASCII值0-127)才能保证正确转换。从U + 0080(即ASCII值128)开始的所有内容都可能会或可能不会进行转换,具体取决于所插入字段的整理所隐含的代码页。如果该排序规则的代码页没有该符号的映射,则代之以?
。
要找出代码页是究竟是什么,首先通过以下两种查询发现场的归类:
SELECT * FROM sys.columns WHERE [object_id] = OBJECT_ID(N'table_name');
-- OR:
EXEC sp_help N'table_name';
然后你可以从整理发现代码页,使用:
SELECT COLLATIONPROPERTY('collation_name', 'CodePage');
然后,您可以在几个网站中的任何一个网站上找到一个图表,根据该代码页码显示您映射的内容。
排序规则不是按行排列的,它们是按字段排列的。因此,无论排序规则是什么,字段都会确定非Unicode字段的字符集(即CHAR
/VARCHAR
/TEXT
)。
所以问题是:在问题中术语“ASCII”是什么意思?它在技术上仅指7位值(前128个;值0-127),但人们经常使用它来表示任何可以放入单个字节的内容,其中还包括扩展ASCII值(第128个值) 128 - 255),这取决于代码页。
对于周围有VARCHAR
列NVARCHAR
变量和文字的潜在问题(S):指标不会被忽略,但有一定的负面影响,而且变化的基础上VARCHAR
列的排序规则。
如果列归类是SQL Server归类(即以SQL_
开头,例如SQL_Latin1_General_CP1_CI_AS
),那么您可以获得索引扫描,但不能搜索。
但是,如果列归类是Windows归类(即不是以SQL_
开头,例如Latin1_General_100_CI_AS
),那么您可以获得索引搜索。
下面的测试显示了这种行为:
-- DROP TABLE dbo.VarcharColumnIndex;
CREATE TABLE dbo.VarcharColumnIndex
(
ID INT IDENTITY(1, 1) NOT NULL CONSTRAINT [PK_VarcharColumnIndex] PRIMARY KEY CLUSTERED,
SqlServerCollation VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS,
WindowsCollation VARCHAR(50) COLLATE Latin1_General_100_CI_AS
);
CREATE NONCLUSTERED INDEX [IX_VarcharColumnIndex_SqlServerCollation]
ON dbo.VarcharColumnIndex ([SqlServerCollation]);
CREATE NONCLUSTERED INDEX [IX_VarcharColumnIndex_WindowsCollation]
ON dbo.VarcharColumnIndex ([WindowsCollation]);
INSERT INTO dbo.VarcharColumnIndex ([SqlServerCollation], [WindowsCollation])
VALUES ('a', 'b');
DECLARE @a NVARCHAR(50) = N'a';
SELECT [SqlServerCollation] FROM dbo.VarcharColumnIndex WHERE [SqlServerCollation] = @a;
-- Index Scan
DECLARE @b NVARCHAR(50) = N'b';
SELECT [WindowsCollation] FROM dbo.VarcharColumnIndex WHERE [WindowsCollation] = @b;
-- Index Seek
这表明你没有使用parametrised查询? –
不,它使用CakePHP,它只是生成SQL,然后将其作为未参数化查询运行它 – icc97
@Martin Smith:前一段时间我们注意到查询计划中没有转换。 By design http://sqlblog.com/blogs/paul_white/archive/2011/07/19/join-performance-implicit-conversions-and-residuals.aspx – gbn