GVKun编程网logo

SQL Server 2008区分大小写的唯一列(sql server区分大小写吗)

9

对于SQLServer2008区分大小写的唯一列感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍sqlserver区分大小写吗,并为您提供关于Django中不区分大小写的唯一模型字段?、MsSQ

对于SQL Server 2008区分大小写的唯一列感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍sql server区分大小写吗,并为您提供关于Django中不区分大小写的唯一模型字段?、Ms SQLServer 查询 区分大小写、MySQL中如何实现区分大小写的唯一性和不区分大小写的搜索?、postgresql – 可延迟,不区分大小写的唯一约束的有用信息。

本文目录一览:

SQL Server 2008区分大小写的唯一列(sql server区分大小写吗)

SQL Server 2008区分大小写的唯一列(sql server区分大小写吗)

有没有办法使列既唯一又区分大小写?

我希望能够放

abcdeABCDE

在唯一列中。

答案1

小编典典

可以通过唯一约束来强制唯一性。

唯一索引是否区分大小写由服务器(或表的) 排序规则定义

您可以通过以下查询获取数据库的当前排序规则:

SELECT DATABASEPROPERTYEX(''AdventureWorks'', ''Collation'') SQLCollation;

并且您应该得到类似的东西:

SQLCollation

Django中不区分大小写的唯一模型字段?

Django中不区分大小写的唯一模型字段?

我的用户名基本上是唯一的(不区分大小写),但是按用户提供的显示时大小写很重要。

我有以下要求:

  • 字段与CharField兼容
  • 字段是唯一的,但不区分大小写
  • 字段需要可忽略大小写进行搜索(避免使用iexact,容易忘记)
  • 字段存储的情况不变
  • 最好在数据库级别执行
  • 最好避免存储额外的字段

在Django中有可能吗?

我想出的唯一解决方案是“以某种方式”覆盖模型管理器,使用额外的字段或在搜索中始终使用“ iexact”。

我使用的是Django 1.3和PostgreSQL 8.4.2。

Ms SQLServer 查询 区分大小写

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中如何实现区分大小写的唯一性和不区分大小写的搜索?

MySQL中如何实现区分大小写的唯一性和不区分大小写的搜索?

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 – 可延迟,不区分大小写的唯一约束

postgresql – 可延迟,不区分大小写的唯一约束

在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 like text.

它完全符合你的情况.每个数据库运行一次:

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 – 可延迟,不区分大小写的唯一约束等相关内容,可以在本站寻找。

本文标签: