我们有一个遗留数据库,其中一些(较旧的)列使用"SQL_Latin1_General_CP1_CI_AS",最近的更改使用了"Latin1_General_CI_AS".
这是一个痛苦,因为连接需要额外的COLLATE语句才能工作.
我想把所有内容都改为"Latin1_General_CI_AS".从我可以收集的内容来看,它们或多或少是相同的排序规则,在此过程中我不会丢失数据......
有谁知道是否是这种情况?
当将夏威夷报价与字符串函数结合使用时,在T-SQL中有一些奇怪的行为。这里发生了什么?我想念什么吗?其他角色也会遭受同样的问题吗?
SELECT UNICODE(N'?') -- Returns 699 as expected.
SELECT REPLACE(N'"?', '"', '_') -- Returns "?, I expected _?
SELECT REPLACE(N'a?', 'a', '_') -- Returns a?, I expected _?
SELECT REPLACE(N'"?', N'?', '_') -- Returns __, I expected "_
SELECT REPLACE(N'-', N'?', '_') -- Returns -, I expected -
Run Code Online (Sandbox Code Playgroud)
另外,在LIKE例如中使用时很奇怪:
DECLARE @table TABLE ([Name] NVARCHAR(MAX))
INSERT INTO
@table
VALUES
('John'),
('Jane')
SELECT
*
FROM
@table
WHERE
[Name] LIKE N'%?%' -- This returns both records. I expected none.
Run Code Online (Sandbox Code Playgroud) 似乎SQL中的ß= ss.我需要能够在严格的特征基础上进行区分.
即从表格中选择*,其中'%ß%'等名称会产生BrianBrußStevenSossmix
等等..
我查看了不同的Collations,看看是否有一个忽略了角色扩展,但到目前为止没有运气.
数据库默认使用Latin1_General_CI_AS - 我也尝试过Latin1_General_CS_AS和Latin1_General_CS_AS_WS,两者都没有用.
任何帮助,将不胜感激.