powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
15 сообщений из 65, страница 3 из 3
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38488906
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Методы решения мне видятся исключительно организационые:
1) Забить (более мягкий вариант - добавлять всяких разъяснений, почему буква с закорючкой идет за два символа)
2) Втихую делать длину поля на N% больше
3) Вообще не ограничивать размеры полей в БД
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38488907
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladты проверял возможность такого сценария ?
Нет, чистое теоретизирование.
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489112
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladFr0sT-Brutal,

ты проверял возможность такого сценария ?
Сейчас проверил, оказался прав (хотя и не сомневался)
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489241
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalСейчас проверил, оказался прав (хотя и не сомневался)И можно узнать подробности этой проверки ?
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489294
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SET SQL DIALECT 3;

SET NAMES UTF8;

CREATE DATABASE 'test'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET UTF8 COLLATION UTF8;

CREATE TABLE TABLE2 (
    ID   INTEGER,
    STR  VARCHAR(4)
);



В ИБЭ ввожу "Иван" - ОК, "Ива́н" - SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.

И это, в общем-то, абсолютно правильно, т.к. а́ здесь - это "а"+"ударение", а не "а с ударением". Т.е. все верно и ожидаемо, но это я к тому, что есть дофига подобных модификаторов, на самом деле занимающих место символа в строке, и на это надо как-то закладываться
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489380
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalВ ИБЭ ввожу "Иван" - ОК, "Ива́н" - SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.

И это, в общем-то, абсолютно правильно, т.к. а́ здесь - это "а"+"ударение", а не "а с ударением". Т.е. все верно и ожидаемо, но это я к тому, что есть дофига подобных модификаторов, на самом деле занимающих место символа в строке, и на это надо как-то закладываться1. Какой чарсет коннекта в IBE ?
2. Как вводятся данные ? Параметры или строковый литерал ?
3. Как я могу ввести такие данные ?
4. Как это воспроизвести с isql ?

Пока что я не могу быть уверен, что проблема не в клиентском приложении.
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489400
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalВ ИБЭ ввожу "Иван" - ОК, "Ива́н" - SQL error code = -303.
Я в FARе ввожу "Ивáн" и получаю файл размеров 11 байт. Вычитая три байта BOM, получаем ровно 8 байт, что легко влазит в CHAR(4). Так что вся проблема в том как IBE перекодирует твою строку в utf-8.
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489416
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формы нормализации .

P.S. Составные символы это не придурь, а реальность.
Нет в юникоде "одного кода на символ".
Очень хотели сделать, но "не шмогла я, мужик, не шмогла".
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489419
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalВ ИБЭ ввожу "Иван" - ОК, "Ива́н" - SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.Что-то странно. Я создал вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$ isql -x utf8test.fdb

SET SQL DIALECT 3;

/* CREATE DATABASE 'utf8test.fdb' PAGE_SIZE 4096 DEFAULT CHARACTER SET UTF8; */

/* Table: T, Owner: SYSDBA */
CREATE TABLE T (S VARCHAR(4));

И затем делаю в UTF8-консоли линуха:
Код: plaintext
1.
2.
3.
4.
5.
$ isql utf8test.fdb -n -ch utf8 -i ivan.sql

S
======
Иван

скрипт с иваном в чарсете UTF8 - см аттач. Там в строке 8 знаков
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489429
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

1. utf8 + RUSSIAN_CHARSET
2. тупо paste в грид
3. я набрал в ворде (ударение вводится через alt+0769 на цифровой клаве)
4. что-то совсем нет желания воспроиводить через комстроку, проблема-то не моя :)

авторЯ в FARе ввожу "Ивáн"
Угу, при конвертации где-то буквы нормализовываются (а́ на á - смотреть в хексе!). У меня это 0x0430 0x0301 и 0x00E1.
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489439
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, еще раз, грубо: есть символы "а с ударением", а есть символ "а" и символ "ударение над предыдущим символом". Последний есть "модификатор" (официального названия не знаю - возможно, Bazil подскажет) - и их реально много (штрихи, тильды, черточки, точки, кружочки, да еще сверху/снизу). И то, что при отображении занимает одно знакоместо - может в строке занимать десяток юникодных символов (code point, точнее).
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489565
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal"Ива́н" - SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.ну в Edit с MaxLength=4 этот Иван закономерно не влазит...
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38489965
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fd00ch, это частный случай применения в среде, которую здесь никто не знает ©. Причем даже там могут применяться и гриды, и обычные edit, и другие редакторы, не подтягивающие maxlength из метаданных. А ТС, например, вообще говорил об админке, а значит, подразумевается веб.

В любом случае, ФБ тут ни при чем, а вопрос скорее в проектировании системы. Я бы сделал тихое увеличение указанной юзером длины на 50%.

С этими юникодными кунштюками всплывает другая проблема, уже посерьезнее, а именно - поиск по таким полям. Но это опять же вопрос проектирования ПО.
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38490904
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutalfd00ch, это частный случай применения в среде, которую здесь никто не знает ©ты про винду?
...
Рейтинг: 0 / 0
VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
    #38491426
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про Дельфи
...
Рейтинг: 0 / 0
15 сообщений из 65, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / VARCHAR(N) CHARACTER SET UTF8. Какой нужен N?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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