2

我正在使用 SQL Server 数据库来存储我的应用程序的信息。

表中的一列必须存储区分大小写的数据。

我应该如何将表中的这一特定列设置为区分大小写?

编辑:

1)我使用 linq to sql 进行查询 2)我存储在数据库中的信息是区分大小写的

4

2 回答 2

6

您可以在列级别覆盖排序规则并将其设置为区分大小写的排序规则。

以下脚本显示了两种不同的方式。

  1. 在表创建期间设置排序规则。
  2. 使用 ALTER 语句为现有列设置排序规则。

在整理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');

在区分大小写的列上进行脚本搜索:SQL Fiddle 演示

SELECT  caseinsensitive
    ,   casesensitive  
FROM    textvalue 
WHERE   casesensitive = 'test';

输出

CASEINSENSITIVE  CASESENSITIVE
---------------  -------------
Test             test

在不区分大小写的列上进行脚本搜索:SQL Fiddle 演示

SELECT  caseinsensitive
    ,   casesensitive  
FROM    textvalue 
WHERE   caseinsensitive = 'test';

输出

CASEINSENSITIVE  CASESENSITIVE
---------------  -------------
test             Test
Test             test
TeSt             TeSt
于 2012-05-05T23:12:40.530 回答
1

有答案!看看下面的链接!

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,然后基于该列运行搜索。唯一的缺点是您需要在每次更新列时存储散列值

于 2012-05-05T23:04:52.547 回答