我正在使用 SQL Server 数据库来存储我的应用程序的信息。
表中的一列必须存储区分大小写的数据。
我应该如何将表中的这一特定列设置为区分大小写?
编辑:
1)我使用 linq to sql 进行查询 2)我存储在数据库中的信息是区分大小写的
我正在使用 SQL Server 数据库来存储我的应用程序的信息。
表中的一列必须存储区分大小写的数据。
我应该如何将表中的这一特定列设置为区分大小写?
编辑:
1)我使用 linq to sql 进行查询 2)我存储在数据库中的信息是区分大小写的
您可以在列级别覆盖排序规则并将其设置为区分大小写的排序规则。
以下脚本显示了两种不同的方式。
在整理Latin1_General_CS_AS
中,CS代表CASE SENSITIVE
阅读此处以了解有关 SQL Server 排序规则的更多信息。
CREATE TABLE textvalue
(
caseinsensitive VARCHAR(30)
, casesensitive VARCHAR(30)
COLLATE Latin1_General_CS_AS
);
CREATE TABLE textvalue
(
caseinsensitive VARCHAR(30)
, casesensitive VARCHAR(30)
);
ALTER TABLE textvalue
ALTER COLUMN casesensitive VARCHAR(30)
COLLATE Latin1_General_CS_AS;
INSERT INTO textvalue (caseinsensitive, casesensitive) VALUES
('test', 'Test'),
('Test', 'test'),
('TeSt', 'TeSt');
SELECT caseinsensitive
, casesensitive
FROM textvalue
WHERE casesensitive = 'test';
输出:
CASEINSENSITIVE CASESENSITIVE
--------------- -------------
Test test
SELECT caseinsensitive
, casesensitive
FROM textvalue
WHERE caseinsensitive = 'test';
输出:
CASEINSENSITIVE CASESENSITIVE
--------------- -------------
test Test
Test test
TeSt TeSt
有答案!看看下面的链接!
http://blog.sqlauthority.com/2007/04/30/case-sensitive-sql-query-search/
下面的答案当然是另一种选择,但您确实可以在单个 sql server 列上设置区分大小写的参数。
您可以做的另一件事是将值与 MD5 哈希值进行比较,因为 MD5 哈希值对于每个字符串都是唯一的。
// md5 hash is unique for TEST, and test
SELECT * FROM table WHERE MD5(column) = MD5("TEST") // Hash : 033bd94b1168d7e4f0d644c3c95e35bf
SELECT * FROM table WHERE MD5(column) = MD5("test") // Hash : 098f6bcd4621d373cade4e832627b4f6
您可能在索引方面遇到问题,但绝对值得一试 :) 或者,您可以在列旁边存储一个 md5 哈希,例如 column_md5,然后基于该列运行搜索。唯一的缺点是您需要在每次更新列时存储散列值