我将一个db脚本从64位系统传输到32位系统。当我执行脚本时,它给了我以下错误,警告!最大密钥长度是900字节。该索引的最大长度为1000字节
警告!最大密钥长度是900字节。索引 'UQ__Users__7E800015145C0A3F'的最大长度为1000字节。对于 某些组合较大的值,插入/更新操作将会失败 。
谷歌搜索结果和堆栈溢出问题没有帮助解决这个问题。
我将一个db脚本从64位系统传输到32位系统。当我执行脚本时,它给了我以下错误,警告!最大密钥长度是900字节。该索引的最大长度为1000字节
警告!最大密钥长度是900字节。索引 'UQ__Users__7E800015145C0A3F'的最大长度为1000字节。对于 某些组合较大的值,插入/更新操作将会失败 。
谷歌搜索结果和堆栈溢出问题没有帮助解决这个问题。
看来您正在运行Microsoft SQL Server。有关此主题的更多信息,请查看Microsoft: Maximum Size of Index Keys。或者相关的答案在:900 byte index size limit in character length
varchar类型的存储长度将为+2。
解
ALTER TABLE table_name
ALTER COLUMN column_name varchar(255)
所以尽量列的长度减少到255个字符的和尝试索引。
...或者如果能够在不截断字段数据的情况下执行,则还原为varchar(900)。 – secretwep
对索引具有较大大小的列,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)
通过这种方式,我克服了大型索引列的问题
引用
请指定DBMS您正在使用? –
sql express server 10.50.2500 – ShodowOverRide
可能的重复[900字节索引大小限制字符长度](http://stackoverflow.com/questions/12717317/900-byte-index-size-limit-in-character-length) –