2014-03-04 133 views
16

我将一个db脚本从64位系统传输到32位系统。当我执行脚本时,它给了我以下错误,警告!最大密钥长度是900字节。该索引的最大长度为1000字节

警告!最大密钥长度是900字节。索引 'UQ__Users__7E800015145C0A3F'的最大长度为1000字节。对于 某些组合较大的值,插入/更新操作将会失败 。

谷歌搜索结果和堆栈溢出问题没有帮助解决这个问题。

+0

请指定DBMS您正在使用? –

+0

sql express server 10.50.2500 – ShodowOverRide

+0

可能的重复[900字节索引大小限制字符长度](http://stackoverflow.com/questions/12717317/900-byte-index-size-limit-in-character-length) –

回答

3

varchar类型的存储长度将为+2。

ALTER TABLE table_name 
ALTER COLUMN column_name varchar(255) 

所以尽量列的长度减少到255个字符的和尝试索引。

+1

...或者如果能够在不截断字段数据的情况下执行,则还原为varchar(900)。 – secretwep

4

对索引具有较大大小的列,sqlserver只索引 列,大小最大为900字节。

为了解决这个问题

首先:我添加的列hashCol以产生用于MyCol

alter table myTable 
    add 
    hashCol AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), MyCol)) 

类型SHA1的散列码其次:我添加一个唯一的约束为hashCol唯一地识别MyCol

ALTER TABLE myTable 
    ADD CONSTRAINT hashCol_Unique UNIQUE (hashCol) 

通过这种方式,我克服了大型索引列的问题

引用

Generate Unique hash for a field in SQL Server在-SQL服务器

相关问题