powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 12.5 UNICODE utf8 или utf16 ?
9 сообщений из 9, страница 1 из 1
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33537823
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Планируем перевод серверов с однобайтных кодировок на юникод.

что лучше использовать для хранения char данных?
unichar/univarchar (utf16) или nchar/nvarchar (utf8)

кто-то с этим работал?
какие есть проблемы? (кроме дурных редакторов процедур выдающих лишние пробелы)
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33538137
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тут не надо работать с этим, тут чисто умозрительно.
Если вам не нужно иметь в БД более двух языков, (английского, который есть всегда, и вашего родного), то вам юникод не нужен вообще.

Иначе - надо выбирать между UTF-8 и UTF-16. Если выбираете UTF-16, то ЛЮБОЙ символ будет занимать 2 байта. Если UTF-8 - ANSI -7 bit (латиница) будут занимать 1 байт, остальные - два. Но чисто теоретически немного помедленнее будет обработка строк (я полагаю вы это вряд ли заметите).

Поскольку я преимуществ UTF-16 перед UTF-8 не вижу, а места он займет меньше, то я бы выбирал его.
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33538863
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕсли выбираете UTF-16, то ЛЮБОЙ символ будет занимать 2 байта.

Не факт. Может занимать как 2 так и 4 байта. Занимаемую длину можно определить из @@unicharsize.
Преймущество unichar в простоте миграции с однобайтных кодировок. Не надо увеличивать длину в DDL и StoredProc как при использовании nchar, а только поменять тип. Т.е. если русские буквы хранились в однобайтном ASE используя тип varchar(10), то в юникод сервере должен быть varchar(20) или unichar( 10 )
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33539689
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
moris MasterZivЕсли выбираете UTF-16, то ЛЮБОЙ символ будет занимать 2 байта.

Не факт. Может занимать как 2 так и 4 байта. Занимаемую длину можно определить из @@unicharsize.

Простите, забыл , дествительно НЕ МЕНЕЕ 2-х.
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33545960
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас более двух языков поэтому юникод точно нужен.

вопросы в следующем:

какой должна быть серверная кодировка : utf8 или можно оставить roman8 (которая есть сейчас для однообразия администрирования разных серверов).
если выбирать серверную utf8, то национальные символы в процедурах приводят к проблемам при использовании
Код: plaintext
defncopy -J iso_1
или другой монобайтной кодировки.

unicode кодировки для сервера я так понимаю - нет. отсюда следующий вопрос: как лучше хранить в
unichar char(10)=unichar(10)
или
utf8 char(10)=nchar(10)=char(30) //char*3 для китайцев др. иероглифов
Мне лично больше нравится unichar(10) , но для базы родной юникод это utf8, поэтому не будет ли быстрее, правильнее, лучше использовать utf8?
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33546418
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.
какой должна быть серверная кодировка : utf8 или можно оставить roman8 (которая есть сейчас для однообразия администрирования разных серверов).
если выбирать серверную utf8, то национальные символы в процедурах приводят к проблемам при использовании
Код: plaintext
defncopy -J iso_1
или другой монобайтной кодировки.


Так что раньше дефолтная кодировка была не в сp1251, а roman8? Если так, то русские буквы неправильно раньше хранились(не в сp1251), хотя и отображались читаемо. ASE при конверсии в utf8 не сможет определить что это есть русские буквы. Отсюда проблемы.
P.S. Разумеется тогда и конверсия в другие русские кодировки не работает.

Dmitry.
unicode кодировки для сервера я так понимаю - нет.

Как это нет?? До ASE12.5.1 есть только бинари сортировка для utf8. Но с ASE12.5.1 появились еще очень много различных юникод

csid name description
----------- ---- -----------
190 defaultml Default Unicode multi-lingual ordering
190 thaidict Thai dictionary ordering
190 iso14651 Ordering as per ISO14651 standard
190 utf8bin Ordering for UTF-16 that matches the binary ordering of UTF-8
190 binary Binary ordering for UTF-16
190 altnoacc Alternate (lower-case first) accent-insensitive dictionary ordering
190 altdict Alternate (lower-case first) dictionary ordering
190 altnocsp Alternate (lower-case first) case-insensitive dictionary ordering with order-by preference
190 scandict Scandinavian dictionary ordering
190 scannocp Scandinavian case-insensitive dictionary ordering with order-by preference
190 bin_utf8 Binary sort order for the ISO 10646-1, UTF-8 multibyte encoding character set (utf8).
190 dict General-purpose dictionary ordering
190 nocase General-purpose case-insensitve dictionary ordering
190 nocasep General-purpose case-insensitve dictionary ordering with order-by preference
190 noaccent General-purpose accent-insensitive dictionary ordering
190 espdict Spanish dictionary ordering
190 espnocs Spanish case-insensitive dictionary ordering
190 espnoac Spanish accent-insenitive dictionary ordering
190 rusnocs Russian case-insensitive dictionary ordering
190 cyrnocs Common cyrillic case-insensitive dictionary ordering
190 elldict Greek dictionary ordering
190 hundict Hungarian dictionary ordering
190 hunnoac Hungarian accent-insensitive dictionary ordering
190 hunnocs Hungarian case-insensitive dictionary ordering
190 turknoac Turkish accent-insensitive dictionary ordering
190 turknocs Turkish case-insensitive dictionary ordering
190 cp932bin Ordering that matches the binary ordering of the cp932 character set
190 dynix Chinese phonetic ordering
190 gb2312bn Ordering that matches the binary ordering of the gb2312 character set
190 cyrdict Common cyrillic dictionary ordering
190 turdict Turkish dictionary ordering
190 euckscbn Ordering that matches the binary ordering of the EUCKSC character set
190 gbpinyin Chinese phonetic ordering
190 rusdict Russian dictionary ordering
190 sjisbin Ordering that matches the binary ordering of the SJIS character set
190 eucjisbn Ordering that matches the binary ordering of the EUCJIS character set
190 big5bin Ordering that matches the binary ordering of the big5 character set
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33547329
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. morisТак что раньше дефолтная кодировка была не в сp1251, а roman8? Если так, то русские буквы неправильно раньше хранились(не в сp1251), хотя и отображались читаемо. ASE при конверсии в utf8 не сможет определить что это есть русские буквы. Отсюда проблемы.
P.S. Разумеется тогда и конверсия в другие русские кодировки не работает.

а я и не говорил что там была кирилица :) там были французские буквы ...
а проблема такая: процедуры вьюшки и триггера в базе хранятся порезанными по 255 символов. если поставить серверную кодировку utf8, создать процедуру с фр. символом и по размеру более 255 символов, и вызвать для нее
Код: plaintext
defncopy -J iso_1... out ...
то в процедуре появятся лишние пробелы. это проблема не только defncopy а практически всех редакторов.

2. я имел ввиду: unicode (utf16) character set для сервера я так понимаю - нет.
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33547406
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.по 255 символов. если поставить серверную кодировку utf8, создать процедуру с фр. символом и по размеру более 255 символов, и вызвать для нее
Код: plaintext
defncopy -J iso_1... out ...
то в процедуре появятся лишние пробелы. это проблема не только defncopy а практически всех редакторов.


Это просто defncopy не умеет бороться с лишними кусками строк.
Это не страшно, но если нужно, могу выложить утилитку, которая делает то же что и defncopy, только без этих проблем. Только попозже.
...
Рейтинг: 0 / 0
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
    #33547627
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.
а проблема такая: процедуры вьюшки и триггера в базе хранятся порезанными по 255 символов. если поставить серверную кодировку utf8, создать процедуру с фр. символом и по размеру более 255 символов, и вызвать для нее
Код: plaintext
defncopy -J iso_1... out ...
то в процедуре появятся лишние пробелы. это проблема не только defncopy а практически всех редакторов.


Ну так режет она по 255 символов потому, что сам текст процедуры хранится в syscomment в поле varchar 255. Если очень длинная строка не вмещается, то продолжение будет в следущей строке syscomments. Если поставить utf8 как default, и будут очень длинные строки, то будет резать только русские буквы будет по 127, а только латинские по 255 символов. Что и следовало ожидать.

Dmitry.
2. я имел ввиду: unicode (utf16) character set для сервера я так понимаю - нет.


В ASE utf8 - обозначает в общем смысле ЮНИКОД. Pеализация utf16 идет через типы unichar и univarchar. Поэтому вы можете ставить по default utf8, а хранить данные в utf16 (unichar, univarchar). Cортировка для utf16 - бинарная
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 12.5 UNICODE utf8 или utf16 ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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