powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
20 сообщений из 20, страница 1 из 1
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756911
PtNt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наблюдал на системе клиента сбой влива данных при внешней интеграции, решили быстро костылем, поэтому не помню всех подробностей, но случай заинтересовал.

Итак, БД Oracle, версия вроде бы 11g. Не исполнялся SQL-запрос вида:

Код: plsql
1.
update  MY_TABLE set DSC = '<ЗдесьТекстИз3000+Символов' where ID = XXX



Поле MY_TABLE.DSC описано как: varchar2(4000 CHAR)

Сам текст точно меньше 4 тысяч символов (проверяли в Notepad++), спец. символов типа перевода строк мало.
Но Oracle выдавал ошибку при апдейте - к сожалению, не помню какую.
Если сделать так:

Код: plsql
1.
update  MY_TABLE set DSC = :VALUE where ID = XXX


и прибиндить параметр такую же строку - тоже ошибка, но с другим кодом.
На локальной базе своей попробовал - у меня все корректно работало.

Текст в результате чуть обрезали и вставили ручками.

Но меня все одолевает вопрос - что это могло быть? Какие то специфические настройки Oracle сервера? Не могу докопаться до истины.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756913
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756940
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtNtOracle выдавал ошибку при апдейте - к сожалению, не помню какую.
Если сделать так ... ... - тоже ошибка, но с другим кодом.
Но меня все одолевает вопрос - что это могло быть? Какие то специфические настройки Oracle сервера? Не могу докопаться до истины.

«Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит»

З.Ы.
Без точного текста ошибок установить, что пошло не так - будет крайне затруднительно. Можно придумать тысячу и одну версий, но все они будут на уровне догадок ...
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756942
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаБез точного текста ошибок установить, что пошло не так - будет крайне затруднительно. Можно придумать тысячу и одну версий, но все они будут на уровне догадок ...Странно такое слышать. Наверно поговорить просто хочется?
Причина очевидна. И miksoft на неё указал. А ТС уже даже не в начале 21-ого века по-прежнему считает, что кругом может быть только однобайт.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756946
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Смущает, что две разных ошибки...
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756949
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаСмущает, что две разных ошибки...По-твоему, клиент, не имея технической возможности донести перезначение до сервера, должен падать с серверной ошибкой?
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756951
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

это по твоему.

По-моему - ТС ничего не говорил о путях доставки запроса в базу.
Уж, как минимум, из его описания не следует явно, что оба апдейта пришли в базу разным путем...
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756952
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаПо-моему - ТС ничего не говорил о путях доставки запроса в базу.Да ну?
PtNtи прибиндить параметр такую же строку - тоже ошибка, но с другим кодом.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756954
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаСмущает, что две разных ошибки...Не две. На ограничение длины ошибок больше. В данном случае одно ограничение на литерал и другое на устанавливаемое значение.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756955
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,


и?
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756956
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

но никаких других ошибок, кроме неверной длины литерала, или неверной длина вставляемого в поле таблицы значения, конечно же, произойти не могло?

тогда ок - убедили...
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39756966
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Аннано никаких других ошибок, кроме неверной длины литерала, или неверной длина вставляемого в поле таблицы значения, конечно же, произойти не могло?Про литерал очевидно. Про другие ошибки, зависит от... Биндинг может выдать ошибку размера буфера. Апдейт может вызвать триггер, констрейнт, вычисляемое поле и т.п. с другими ошибками.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757231
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт оракла точно не скажу, но в одно БД встречал ситуацию, когда в зависимости от кодировки, один символ занимал места как два.
Проверьте: начиная со скольки символов перестаёт нормально работать.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757248
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Бердышеввстречал ситуацию, когда в зависимости от кодировки, один символ занимал места как два.
Маловато будет :)
К примеру, в UTF8 символ может занимать от 1 до 6 байт.
Чтите unicode.org до просветления.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757250
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Бердышевкогда в зависимости от кодировки, один символ занимал места как два.Технически грамотный специалист сказал бы два байта.
Александр Бердышевначиная со скольки символов перестаёт нормально работать.Когда lengthb становится больше 4000.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757396
PtNt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftPtNt,

https://docs.oracle.com/cd/B28359_01/server.111/b28320/limits001.htm#i287903 VARCHAR2 Maximum size: 4000 bytes
вот это да... Забыл совсем, а ведь когда то знал ))

Непонятно только тогда зачем Oracle разрешает в таблицах создавать поля varchar2 (4000 CHAR), он же четко понимает, что больше 2000 символов точно никак не влезет при любой кодировке... :(
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757405
PtNt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtNtНепонятно только тогда зачем Oracle разрешает в таблицах создавать поля varchar2 (4000 CHAR), он же четко понимает, что больше 2000 символов точно никак не влезет при любой кодировке... :(
в смысле, не влезет 4000 символов при текущей кодировке 2 байта на символ.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757406
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он же четко понимает, что больше 2000 символов точно никак не влезет при любой кодировке...

Откройте для себя однобайтовые кодировки.
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757419
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtNtкодировке 2 байта на символ.

Когда-то люди старались , придумывали кодировки с переменным числом байтов на символ.

Ибо сказано было "640К хватит всем".
...
Рейтинг: 0 / 0
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
    #39757466
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtNtзачем Oracle разрешает в таблицах создавать поля varchar2 (4000 CHAR), он же четко понимает, что больше 2000 символов точно никак не влезет при любой кодировке1. al32utf8 влезет от 1000 до 4000 символов, причем 4 байта могут занимать и русские буквы кириллицы. Например, Й может быть представлена как 2 байта и как 4 байта
2. Данные либо не ограничиваются, полагаясь на заведомо "большой" размер 4000 байт, либо ограничиваются более скромными значениями. Для неограниченных типов придпочитаю писать byte.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]