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

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

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

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

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

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

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

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

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

какой должна быть серверная кодировка : 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
15.02.2006, 14:14
    #33546418
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
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
15.02.2006, 18:05
    #33547329
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
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
15.02.2006, 18:31
    #33547406
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
Dmitry.по 255 символов. если поставить серверную кодировку utf8, создать процедуру с фр. символом и по размеру более 255 символов, и вызвать для нее
Код: plaintext
defncopy -J iso_1... out ...
то в процедуре появятся лишние пробелы. это проблема не только defncopy а практически всех редакторов.


Это просто defncopy не умеет бороться с лишними кусками строк.
Это не страшно, но если нужно, могу выложить утилитку, которая делает то же что и defncopy, только без этих проблем. Только попозже.
...
Рейтинг: 0 / 0
15.02.2006, 21:02
    #33547627
moris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 12.5 UNICODE utf8 или utf16 ?
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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 12.5 UNICODE utf8 или utf16 ? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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