powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Юникод в базе без конвертации в приложении
49 сообщений из 49, показаны все 2 страниц
Юникод в базе без конвертации в приложении
    #39534050
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько я знаю, то в сама среда Delphi использует UTF16? Или же UTF32? Речь, конечно же о юникодных версиях Дельфи.

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/String_Types_(Delphi) The UnicodeString type has exactly the same structure as the AnsiString type. UnicodeString data is encoded in UTF-16.

Получается, что и приложение использует тоже UTF16?

К чему вопрос.
Если создавать базу, например, в Firebird, то какую кодовую страницу указывать, чтоб в компонентах доступа к базе не нужно было указывать кодировку, ну или чтобы DB-компонентам не приходилось выполнять конвертацию данных?
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534051
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вопрос в догонку.
Кто-нибудь переводил базу из ANSI (Win-1251) на юникод? На сколько это сложно?
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534061
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11например, в Firebird

Вот как раз с Firebird - обломись, она не умеет UTF-16. Как и подавляющее большинство
других СУБД. Поэтому все компоненты доступа обычно конвертируют текст в UTF-8.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534066
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бери Лазаря.
у него utf-8.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534074
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

я так думаю - что через csv или аналог проще всего. мы у себя решили не возиться с конвертацией, а поддержали обе версии. новые базы у нас идут уже в utf, старые работают в 1251. всё работает без проблем.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534076
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534077
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
utf8
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534078
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovX11например, в Firebird

Вот как раз с Firebird - обломись, она не умеет UTF-16. Как и подавляющее большинство
других СУБД. Поэтому все компоненты доступа обычно конвертируют текст в UTF-8.

ничёси
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534081
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonX11,

я так думаю - что через csv или аналог проще всего. мы у себя решили не возиться с конвертацией, а поддержали обе версии. новые базы у нас идут уже в utf, старые работают в 1251. всё работает без проблем

Т.е. надо поддерживать два типа базы?
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534082
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534083
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

если баз довольно много и они большие - то проще так.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534084
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чарсет базы ищу так:

Код: sql
1.
select rdb$character_set_name as charset from rdb$database
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534085
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonX11,

если баз довольно много и они большие - то проще так.

Нет. Спасибо.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534103
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11пока читаю
http://www.sql.ru/forum/1117075/izmenit-kodirovku-bazy
Брось. Читай http://www.ibase.ru/unicode_faq/
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534129
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю. Спасибо.

Я правильно понимаю, что если размер страницы 4096, то размер VARCHAR должен быть 1024?


А то ошибка:
Undefined name. Dynamic SQL Error. SQL error code = -204. Data type unknown. Implementation limit exceeded. COLUMN STR32K.
вот здесь:
Код: sql
1.
CREATE DOMAIN STR32K AS VARCHAR(32000);


Или это касается только индексов, где их размер должен быть 1/4 от размера страницы?
Просто ошибка даже там, где VARCHAR(8192).

Вообще, какой размер страницы рекомендуется для UTF8?


В разделе "Длина строковых столбцов и изменение ее размера" я не нашёл, как правильно рассчитать и указать размер строго поля/домена.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534134
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все строки, насколько я помню, занимают ровно в 4 раза больше места (по байтам). вот из этого можешь исходить.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534138
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторVARCHAR(8192)

потому что максимальный размер VARCHAR в ansi не 32768
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534142
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь https://firebirdsql.org/manual/ru/migration-mssql-data-types-ru.html
написано, что
Символьные данные переменной длины (не-Unicode). Максимальная длина 8000 символов. СУБД Firebird способна хранить до 32765 символов.

т.е. максимальная длина varchar unicode будет 8191?
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534144
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonавторVARCHAR(8192)

потому что максимальный размер VARCHAR в ansi не 32768

да, ошибочка :)
32764
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534207
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Подчистил" длинные строки.
Скрипт выполнился успешно.
Буду проверять.
Всем спасибо за подсказки.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534450
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert теперь при открытии таблицы выводит ошибку:

block size exceed implementation restriction


Есть какие-то ограничения на общий размер текстовых полей таблицы?
Например, если в таблице есть 2-4 поля varchar общим размером более 8191.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534480
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийбери Лазаря.
у него utf-8.
это пока что. НАсколько я в курсе, там тоже utf-16 планируется в обозримом будущем
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534712
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

У лазаря utf8 не везде. В линуксе - utf8, в винде - 1251. Собираются вроде бы на 'обычный' юникод переходить.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534722
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.10.2017 14:23, makhaon пишет:
> В линуксе - utf8, в винде - 1251.

с чего вдрук?!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534735
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Насколько я помню, до было так.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39534746
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.10.2017 14:46, makhaon пишет:
> Насколько я помню, до было так.

в эпоху Tsarya Goroha
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39535654
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Странно, на BOM до сих пор жалуются, как так?

http://freepascal.ru/forum/viewtopic.php?f=5&t=25496
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536035
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.10.2017 20:10, makhaon пишет:
> Странно, на BOM до сих пор жалуются, как так?

BOM нахер не нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536306
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Есть какие-то ограничения на общий размер текстовых полей таблицы?
да, 64к на размер записи.
https://firebirdsql.org/en/firebird-technical-specifications/
Вообще должно было выругаться при создании таблицы или добавлении столбцов сверх лимита.
Вам зачем такие конские строки? Может, лучше blob?
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536309
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВам зачем такие конские строки? Может, лучше blob?
Да, наверное blob было бы правильней.
В таких строках могут храниться разные настройки, параметры, список каких-нибудь параметров/настроек и т.д.
Наверное переделаю, да.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536315
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

настройки??? если бы там что-то бинарное было, так тогда надо не юникод, а OCTETS использовать. И то, он "плохо читается" клиентскими библиотеками, если туда 0 попадает, а строка копируется в си-шную.
Вот если в xml настройки хранить, тогда да, строка, но так практически никто не делает, хранят в блобах.
Настройки - это совершенно вторичная информация, к которой обращение обычно идет только для конкретной записи.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536317
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, у компонентов DevExpress есть замечательный TcxCheckList, который хранит данные в виде чисел с запятыми "19,17,4,18", а названия потом ведь тоже нужно вывести. Сколько там будет символов - ф.з.

А есть древовидные структуры. И нужно вывести весь путь с самого нижнего узла и до корня. И сколько там будет символов - ф.з.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536318
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvнастройки???

Перепроверил. Я загоняю настройки в Stream и потом сохраняю всё-таки в blob.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536338
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

обычно пишут не "ф.з.", а х.з.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39536350
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, да )))
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39537577
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonX11,

я так думаю - что через csv или аналог проще всего. мы у себя решили не возиться с конвертацией, а поддержали обе версии. новые базы у нас идут уже в utf, старые работают в 1251. всё работает без проблем.

Не знаю, как у вас получилось, но я вот на работающем приложении пытался подключиться к базе и получить данные.
Delphi XE3, FibPlus.

Project raised exception class EDatabaseError with message 'queryUsers: Type mismatch for field 'Пользователь', expecting: String actual: WideString '.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39537628
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

На IBX'ах, меняю чарсет соединения, этого почти достаточно, было несколько тонких мест в запросах. Как детектировать - написал.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39537636
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvX11,

обычно пишут не "ф.з.", а х.з.

Ох, недаром тебя "граммар наци" прозвали
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39538609
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

да никто не пишет "ф.з." Потому что ФЗ - это федеральный закон :-)
X11Project raised exception class EDatabaseError with message 'queryUsers: Type mismatch for field 'Пользователь', expecting: String actual: WideString'.
странно. В IBX XE3 со стороны приложения уже все должно быть юникодное, независимо от кодировки соединения - 1251 или utf8.
Может, в датасете остались явно определены столбцы, а проект перенесен из неюникодной Дельфи?
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39538626
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВ IBX XE3

У МЕНЯ:
X11Delphi XE3, FibPlus.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39538628
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvМожет, в датасете остались явно определены столбцы, а проект перенесен из неюникодной Дельфи?

Да, когда-то давно было на D2007. Уже больше года прошло.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39538684
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.10.2017 12:29, X11 пишет:
> У МЕНЯ:
> X11
> Delphi XE3, FibPlus .

их недавно хоронили.
порвали два баяна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39538754
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11...
А есть древовидные структуры. И нужно вывести весь путь с самого нижнего узла и до корня. И сколько там будет символов - ф.з.
Еще одна причина "так не делать". Я про любителей иерархические структуры в БД ч/з анус строить.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39538899
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийих недавно хоронили.
порвали два баяна.

на сколько я знаю, то для Berlin даже есть, для Tokyo не встречал
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39538906
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Мимопроходящийих недавно хоронили.
порвали два баяна.

на сколько я знаю, то для Berlin даже есть, для Tokyo не встречал

Я проверил - для Токио ставится без бубнов.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39539321
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Project raised exception class EDatabaseError with message 'queryUsers: Type mismatch for field 'Пользователь', expecting: String actual: WideString '.

В свете этих событий, хочу спросить. Если я в DFM просто заменю TpFIBStringField на TpFIBWideStringField?
Или даже не пытаться, а создавать все поля заново?
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39541135
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Если я в DFM просто заменю TpFIBStringField на TpFIBWideStringField?

Поменял через Notepad++.
Открыл проект. Перекомпилировал. Без ошибок.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39541184
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дизайне НД открываются без ошибок.
А во время работы приложения получаю исключение в момент
Код: pascal
1.
tableUsers.open;



tableUsers: Type mismatch for field 'UName', expecting: WideString actual: String.
...
Рейтинг: 0 / 0
Юникод в базе без конвертации в приложении
    #39541202
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправильно была указана кодировка в настройках подключения к базе. Пока всё норм.
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Юникод в базе без конвертации в приложении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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