Oracle изменение столбца не допускается из-за длины значения - PullRequest
0 голосов
/ 27 января 2020

Мне нужно изменить столбец в моей таблице, уменьшив его длину с 10 до 1:

alter table mytable
modify mycolumn varchar2(1)

, но это возвращает следующую ошибку:

00000 - "невозможно уменьшить длину столбца, поскольку какое-то значение слишком велико"

Я удалил строки, которые, по моему мнению, вызывали проблему:

delete from mytable
where length(mycolumn) > 1

и затем

select count(*) from mytable
where length(mycolumn) > 1

возвращает 0

Но когда я пытаюсь запустить оператор alter modify, я снова получаю то же сообщение об ошибке.

Чего мне не хватает?

1 Ответ

2 голосов
/ 27 января 2020

По умолчанию varchar2(1) рассматривается как varchar длиной 1 байт . Однако некоторые кодировки требуют более 1 байта для хранения символа (UTF-8, UTF-16 и т. Д. c.). Возможно, в таблице есть символ, для которого требуется более одного байта, поэтому размера varchar2(1) просто недостаточно.

varchar2(1 char) заставляет Oracle считать размер в символах, а не в байтах, так что устраняет проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...