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

Итак, БД 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
09.01.2019, 00:28
    #39756913
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
...
Рейтинг: 0 / 0
09.01.2019, 07:20
    #39756940
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
PtNtOracle выдавал ошибку при апдейте - к сожалению, не помню какую.
Если сделать так ... ... - тоже ошибка, но с другим кодом.
Но меня все одолевает вопрос - что это могло быть? Какие то специфические настройки Oracle сервера? Не могу докопаться до истины.

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

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

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

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

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


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

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

тогда ок - убедили...
...
Рейтинг: 0 / 0
09.01.2019, 08:48
    #39756966
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
Щукина Аннано никаких других ошибок, кроме неверной длины литерала, или неверной длина вставляемого в поле таблицы значения, конечно же, произойти не могло?Про литерал очевидно. Про другие ошибки, зависит от... Биндинг может выдать ошибку размера буфера. Апдейт может вызвать триггер, констрейнт, вычисляемое поле и т.п. с другими ошибками.
...
Рейтинг: 0 / 0
09.01.2019, 15:12
    #39757231
Александр Бердышев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
Насчёт оракла точно не скажу, но в одно БД встречал ситуацию, когда в зависимости от кодировки, один символ занимал места как два.
Проверьте: начиная со скольки символов перестаёт нормально работать.
...
Рейтинг: 0 / 0
09.01.2019, 15:28
    #39757248
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
Александр Бердышеввстречал ситуацию, когда в зависимости от кодировки, один символ занимал места как два.
Маловато будет :)
К примеру, в UTF8 символ может занимать от 1 до 6 байт.
Чтите unicode.org до просветления.
...
Рейтинг: 0 / 0
09.01.2019, 15:29
    #39757250
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
Александр Бердышевкогда в зависимости от кодировки, один символ занимал места как два.Технически грамотный специалист сказал бы два байта.
Александр Бердышевначиная со скольки символов перестаёт нормально работать.Когда lengthb становится больше 4000.
...
Рейтинг: 0 / 0
09.01.2019, 17:35
    #39757396
PtNt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
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
09.01.2019, 17:40
    #39757405
PtNt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
PtNtНепонятно только тогда зачем Oracle разрешает в таблицах создавать поля varchar2 (4000 CHAR), он же четко понимает, что больше 2000 символов точно никак не влезет при любой кодировке... :(
в смысле, не влезет 4000 символов при текущей кодировке 2 байта на символ.
...
Рейтинг: 0 / 0
09.01.2019, 17:40
    #39757406
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не дает сохранить < 4к символов в поле varchar2(4000 CHAR)
он же четко понимает, что больше 2000 символов точно никак не влезет при любой кодировке...

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

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

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


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