10. Но русских только 4 (два байта на букву + байт на селектор страницы).
Так тогда получается что в скобках идёт количество байт, а не количество
символов. Так а почему тогда я не могу объявить поле VARCHAR(32700) ?
В скобках идет максимальное количество символов. Firebird потом умножает
макс. количество байт на символ на макс. количество символов и смотрит,
влезет то, что получилось в макс. размер VARCHAR в байтах.
Никто не мешает тебе объявить столбец как VARCHAR(32000) CHARACTER SET
ASCII, но тогда в него другие буквы не полезут. А ежели хочешь в тот же
столбец и английские и русские буквы пихать (а потом еще и китайские),
тогда придется жить с тем ограничением.
VARCHAR(8000), 32000 английских/немецких ты туда запихнешь, но вот
русских только около 16.000. При чем если компоненты шибко умные
(например старые версии Jaybird), то больше 8.000 могут и не дать
записать.
А почему тогда это обламывается с ошибкой "бла бла бла, string truncation"
EXECUTE BLOCK
RETURNS (
STR VARCHAR(3) CHARACTER SET UTF8 )
AS
BEGIN
STR = 'abcde';
SUSPEND;
END
Хм... Все, что я раньше говорил работает для UNICODE_FSS. Для UTF8 -
нет. Как оказалось, там проверка на количество символов, не байт.
EXECUTE BLOCK
RETURNS (
STR VARCHAR(3) CHARACTER SET UNICODE_FSS)
AS
BEGIN
STR = 'abcde';
SUSPEND;
END
Пардон.
Роман