Предупреждение! Максимальная длина ключа - 900 байт. Индекс имеет максимальную длину 1000 байт
Я передаю db script из 64-разрядной системы в 32-битную систему. Когда я выполняю script, он вызывает следующую ошибку:
Внимание! Максимальная длина ключа - 900 байт. Индекс 'UQ__Users__7E800015145C0A3F' имеет максимальную длину 1000 байт. Для некоторая комбинация больших значений, операция вставки/обновления будет потерпеть неудачу.
Результаты Google и вопросы не помогли решить эту проблему.
Ответы
Ответ 1
Для индексирования столбцов с большими размерами только индексы sqlserver столбцы размером до 900 байт.
Чтобы решить эту проблему
Во-первых: я добавил столбец hashCol для генерации hashcode типа SHA1 для MyCol
alter table myTable
add
hashCol AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), MyCol))
Во-вторых: я добавил уникальное ограничение для hashCol для уникальной идентификации MyCol
ALTER TABLE myTable
ADD CONSTRAINT hashCol_Unique UNIQUE (hashCol)
Таким образом, я преодолел проблему индексирования столбцов с большим размером
ссылки
Создать уникальный хэш для поля в SQL Server в sql-сервере
Ответ 2
Длина хранения типа varchar будет +2.
Решение
ALTER TABLE table_name
ALTER COLUMN column_name varchar(255)
попробуйте уменьшить длину столбца до 255 символов и попробуйте индексировать.
Ответ 3
Кажется, что вы используете сервер Microsoft SQL. Microsoft: максимальный размер указательных клавиш для получения дополнительной информации об этой теме. Или связанный ответ: ограничение размера байта в 900 байтов в длину символа
Ответ 4
Общая длина всех столбцов должна быть менее 900.
-- make combined colum length(to be indexed / add constrains) less <= 900
ALTER TABLE tabbleName ALTER COLUMN col1 VARCHAR (500) NULL;
ALTER TABLE tabbleName ALTER COLUMN col2 VARCHAR (200) NULL;
ALTER TABLE tabbleName ALTER COLUMN col3 VARCHAR (200) NULL;
-- Then add the index
ALTER TABLE tabbleName ADD CONSTRAINT uck UNIQUE (col1, col2, col3);