powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как вставить в Varchar(n) строку длиной N+x?
12 сообщений из 12, страница 1 из 1
Как вставить в Varchar(n) строку длиной N+x?
    #38978278
Квази
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странная проблема, решение скорее всего простое, но я его не вижу. Каким образом в varchar(12) могла вставиться строка длиной в 17 символов?
Server Version: WI-V2.5.3.26778 Firebird 2.5
Server Implementation: Firebird/x86-64/Windows NT
Service Version: 2
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978283
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UTF-8
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978287
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квази,

Теоретизирую (потому что в конце будет все не так)

ну например,
сначала был varchar(20), вставили 17 символов, а потом через системные таблицы (или ИБЭксперт) урезали тип столбца до 12 символов. Хотя, по идее, в этом случае данные бы не показывались (ошибка про truncate).

кстати, в rdb$formats у этой таблицы 3 формата. Похоже, что какой-то столбец добавляли и удаляли.

Якобы у столбца предварительно была длина около varchar(50) (есть на это некоторые намеки).

кроме того,
в этой таблице столбец имеет field_position = 7. Внезапно?

В этой базе в нынешний столбец действительно нельзя ввести больше 12 символов, причем даже цифр.
123456789012 прокатывает
1234567890123 - уже нет, truncation


и еще. Сервер начинает ругаться на malformed string только если попытаться урезать эту строку меньше 8 символов
select cast(building as varchar(8)) from address
все ок
select cast(building as varchar(7)) from address
malformed string.
если туда добавить строку из 12 цифр, при
select cast(building as varchar(11)) from address
ругается на truncation.

обычные буквы (АБВ) добиваются до 12, после этого больше не дает ввести (truncation).
А этот чудной Толеген Токтаров впилился хоть бы хны, и вводится сколько угодно раз :-)
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978290
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

то есть, в строке "ТОЛЕГЕН ТОКТАРОВ" не все символы двухбайтовые?
Замечу, что прямо в БД, на странице с этими данными, вот эти две записи занимают по 53 байта, а если создать еще одну запись с 12-ю цифрами, то ее длина - 34 байта.
Толегена я еще раз ввел - на диске сохранилась абсолютно идентичная запись в 53 байта. С буквами АБВ... (12 букв) - 46 байт.

(указываю размер записи, packed, не размер строки)
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978369
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvто есть, в строке "ТОЛЕГЕН ТОКТАРОВ" не все символы двухбайтовые?
Все. Но utf-8 рассчитана на четырёхбайтовые.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978375
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

кто-то из нас что-то не понимает.

сколько символов в "толеген токтаров"?
сколько символов в "абвгдежзиклм", "123456789012" и в "1234567890123"? Почему "абв..." в 13 символов не проходит, "123.." в 13 символов не проходит, а "толеген..." - проходит? Чем символы "толеген.." отличаются от "абв.."? Даже если бы часть букв в "толеген" была однобайтовая, этот вариант ответа не прокатывает, потому что "123.." - однобайтовые однозначно.
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978499
Квази
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvКвази,
Теоретизирую (потому что в конце будет все не так)
ну например,
сначала был varchar(20), вставили 17 символов, а потом через системные таблицы (или ИБЭксперт) урезали тип столбца до 12 символов. Хотя, по идее, в этом случае данные бы не показывались (ошибка про truncate).
кстати, в rdb$formats у этой таблицы 3 формата. Похоже, что какой-то столбец добавляли и удаляли.
Якобы у столбца предварительно была длина около varchar(50) (есть на это некоторые намеки).
кроме того,
в этой таблице столбец имеет field_position = 7. Внезапно?

Данная база - фрагмент рабочей. Из нее удалил все, кроме таблицы. Из этой таблицы тоже удалил все поля кроме проблемного. Размер поля не менялся (по крайней мере в обозримом времени), данная запись была внесена несколько дней назад. Записи импортируются из Excel утилитой (delphi XE+FIBC). Насколько знаю в утилите простые insert into...
"Вот и все, что я хотел сказать о войне во Вьетнаме"
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978521
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема с теми строками, которые имеют больше 12 символов и ровно 31 байт в представлении.
Спрошу Адриано, есть там одно место...
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978535
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

типа, "магическая дыра" в проверке превышения длины строки?
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978544
Чпок-с . А пофиксено только в 3.0.
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978557
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вано Сусанишвили,

да, это оно. Требуй бекпорта в 2.5
...
Рейтинг: 0 / 0
Как вставить в Varchar(n) строку длиной N+x?
    #38978571
hvladТребуй бекпорта в 2.5не хочет он, про нежелание пить шампан страшный риск что-то там говорит... :-/
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как вставить в Varchar(n) строку длиной N+x?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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