对于SQLServer2008区分大小写的唯一列感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍sqlserver区分大小写吗,并为您提供关于Django中不区分大小写的唯一模型字段?、MsSQ
对于SQL Server 2008区分大小写的唯一列感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍sql server区分大小写吗,并为您提供关于Django中不区分大小写的唯一模型字段?、Ms SQLServer 查询 区分大小写、MySQL中如何实现区分大小写的唯一性和不区分大小写的搜索?、postgresql – 可延迟,不区分大小写的唯一约束的有用信息。
本文目录一览:- SQL Server 2008区分大小写的唯一列(sql server区分大小写吗)
- Django中不区分大小写的唯一模型字段?
- Ms SQLServer 查询 区分大小写
- MySQL中如何实现区分大小写的唯一性和不区分大小写的搜索?
- postgresql – 可延迟,不区分大小写的唯一约束
SQL Server 2008区分大小写的唯一列(sql server区分大小写吗)
有没有办法使列既唯一又区分大小写?
我希望能够放
abcde 和 ABCDE
在唯一列中。
答案1
小编典典可以通过唯一约束来强制唯一性。
唯一索引是否区分大小写由服务器(或表的) 排序规则定义 。
您可以通过以下查询获取数据库的当前排序规则:
SELECT DATABASEPROPERTYEX(''AdventureWorks'', ''Collation'') SQLCollation;
并且您应该得到类似的东西:
SQLCollation
Django中不区分大小写的唯一模型字段?
我的用户名基本上是唯一的(不区分大小写),但是按用户提供的显示时大小写很重要。
我有以下要求:
- 字段与CharField兼容
- 字段是唯一的,但不区分大小写
- 字段需要可忽略大小写进行搜索(避免使用iexact,容易忘记)
- 字段存储的情况不变
- 最好在数据库级别执行
- 最好避免存储额外的字段
在Django中有可能吗?
我想出的唯一解决方案是“以某种方式”覆盖模型管理器,使用额外的字段或在搜索中始终使用“ iexact”。
我使用的是Django 1.3和PostgreSQL 8.4.2。
Ms SQLServer 查询 区分大小写
1.
Case Insensitive & Case Sensitive
数据库默认设置一般是COLLATE Chinese_PRC_CI_AS,即不区分大小写,可以在查询的时候在语句最后增加"collate Chinese_PRC_CS_AS",指定为区分大小写进行查询,如:
select * from tbl_dept
where id= 'aA001' collate Chinese_PRC_CS_AS
这将不会查出'AA001'的记录.
2.
从sqlserver查询分析器中复制出来的字段值不一定是准确的:
比如某字段类型为varchar(15),某条记录的该字段的值为"A123"尾随一个CRLF(回车换行)符号,在从查询分析器中复制出来会显示为多出两个空格(用UltraEdit查看16进制显示为41 31 32 33 20 20 0D 0A),而从企业管理器里面复制出来就是真实的"A123"尾随一个CRLF.(41 31 32 33 0D 0A).
因为即使"A123"没有尾随CRLF,从查询分析器中复制出来,依然可以看到换行0D 0A,所以从以上信息可以推测如下对应关系:
41 31 32 33 20 20 0D 0A (左边粗体部分0D 0A其实是查询分析器复制的时候自动附加的)
41 31 32 33 0D 0A
即真正存储的CRLF符号在查询分析器中复制出来后被转换成了两个空格(20 20).
关注以下使用方法:
select *
from ICIssue
where 员工编号 = 'A123' + CHAR(13)+ CHAR(10)
第一种:(蟋蟀) ALTER TABLE tb ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS --不区分大小写 ALTER TABLE tb ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CS_AS --区分大小写 alter database 数据库 COLLATE Chinese_PRC_CS_AS 第二种:(tree) --创建如下用户自定义函数(UDF) CREATE FUNCTION StrComp(@Str1 VARCHAR(50),@Str2 VARCHAR(50)) --ALTER FUNCTION StrComp(@Str1 VARCHAR(50),@Str2 VARCHAR(50)) RETURNS INTEGER AS BEGIN DECLARE @i INTEGER --DECLARE @Str1 VARCHAR(50) --DECLARE @Str2 VARCHAR(50) DECLARE @y INT --SET @Str1='a' --SET @Str2='A' SET @i=0 --SELECT ASCII(SUBSTRING(@Str1,@i+1,1)) SET @y=1 DECLARE @iLen INT SET @iLen = LEN(LTRIM(RTRIM(@Str1))) IF LEN(LTRIM(RTRIM(@Str1))) < LEN(LTRIM(RTRIM(@Str2))) --THEN SET @iLen = LEN(LTRIM(RTRIM(@Str2))) WHILE (@i < @iLen) BEGIN IF (ASCII(SUBSTRING(@Str1,1))=ASCII(SUBSTRING(@Str2,1))) --THEN SET @i = @i +1 ELSE BEGIN SET @y=0 BREAK END END RETURN @y END 测试: select * from Table1 Where dbo.StrComp(Field1,'aAbB') =1 第三种:(Oliver) sql Server 数据库中的文本信息可以用大写字母、小写字母或二者的组合进行存储。例如,姓氏可以"SMITH"、"Smith"或"smith"等形式出现。
MySQL中如何实现区分大小写的唯一性和不区分大小写的搜索?
借助以下两种方式,您可以实现区分大小写的唯一性和不区分大小写的搜索 -
- VARBINARY 数据类型
- _bin 排序规则
VARBINARY 数据类型
要使用 VARBINARY 数据类型,我们首先创建一个表。创建表的查询如下 -
mysql> create table SearchingDemo2 -> ( -> UserId VARBINARY(128) NOT NULL, -> UNIQUE KEY index_on_UserId2(UserId ) -> )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Query OK, 0 rows affected, 1 warning (0.99 sec)
请记住,UserId 在“UserId”列上具有数据类型 VARBINARY(128) 和 Index(''index_on_UserId2'')。
_bin 排序规则
第二种方法如下。让我们创建一个新表 -
mysql> create table SearchingDemo -> ( -> UserId varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, -> UNIQUE KEY index_on_UserId(UserId ) -> )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Query OK, 0 rows affected, 2 warnings (0.88 sec)
UserId 在“UserId”列上具有数据类型 varchar(128) 和索引(index_on_UserId)。
上述两种方法都在 MySQL 中实现了区分大小写的唯一性和不区分大小写的搜索。
以上就是MySQL中如何实现区分大小写的唯一性和不区分大小写的搜索?的详细内容,更多请关注php中文网其它相关文章!
postgresql – 可延迟,不区分大小写的唯一约束
我们假设下列基本表:
CREATE TABLE sample_table ( my_column VARCHAR(100) );
如果不需要延迟约束,就像创建具有函数的唯一索引一样简单,例如:
CREATE UNIQUE INDEX my_unique_index ON sample_table(UPPER(my_column));
延迟约束检查需要明确创建约束,例如:
ALTER TABLE sample_table ADD CONSTRAINT my_unique_constraint UNIQUE(my_column) DEFERRABLE INITIALLY IMMEDIATE;
不幸的是,不可能在唯一约束中使用任意函数.
一个可能的解决方法是创建与my_column相同内容的附加列,但大写,在每次更新/插入后通过触发器更新,然后在此人造列上创建一个可延迟的唯一约束.然而,这听起来像是一个非常难看的黑客.
或者,应该可以使用CREATE CONSTRAINT TRIGGER并手动检查不区分大小写的唯一性(当然,常规索引仍然是必需的).对于这样一个简单的(我认为是这样)的要求,这听起来有点复杂.
有没有更简单和/或更优雅的方式来解决这个限制?
citext
来规避限制.引用手册:
The
citext
module provides a case-insensitive character string type,
citext. Essentially,it internally calls lower when comparing values.
Otherwise,it behaves almost exactly liketext
.
它完全符合你的情况.每个数据库运行一次:
CREATE EXTENSION citext;
然后你可以:
CREATE TABLE sample_table ( my_column citext,CONSTRAINT my_unique_constraint UNIQUE(my_column) DEFERRABLE INITIALLY IMMEDIATE );
关于SQL Server 2008区分大小写的唯一列和sql server区分大小写吗的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Django中不区分大小写的唯一模型字段?、Ms SQLServer 查询 区分大小写、MySQL中如何实现区分大小写的唯一性和不区分大小写的搜索?、postgresql – 可延迟,不区分大小写的唯一约束等相关内容,可以在本站寻找。
本文标签: