Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как вставить в Varchar(n) строку длиной N+x? / 12 сообщений из 12, страница 1 из 1
07.06.2015, 00:00
    #38978278
Квази
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в Varchar(n) строку длиной N+x?
Странная проблема, решение скорее всего простое, но я его не вижу. Каким образом в 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
07.06.2015, 00:08
    #38978283
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в Varchar(n) строку длиной N+x?
UTF-8
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.06.2015, 00:31
    #38978287
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в Varchar(n) строку длиной N+x?
Квази,

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

ну например,
сначала был 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
07.06.2015, 00:37
    #38978290
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить в Varchar(n) строку длиной N+x?
Dimitry Sibiryakov,

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

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

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

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

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

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

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


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