powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Литеральный блоб - кодировка character set UTF8
8 сообщений из 33, страница 2 из 2
Литеральный блоб - кодировка character set UTF8
    #39939811
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
PolesovДля всех трех коллейтов запрос возвращает 0

http://www.ibase.ru/files/firebird/langref25rus/index.html#systables-collations

RDB$COLLATION_ATTRIBUTES SMALLINT Атрибуты сортировки. Представляет собой битовую маску, где 1-й бит показывает учитывать ли конечные пробелы при сравнении (0 — NO PAD; 1 — PAD SPACE); 2-й бит показывает является ли сравнение чувствительным к регистру символов (0 — CASE SENSITIVE, 1 — CASE INSENSITIVE); 3-й бит показывает будет ли сравнение чувствительным к акцентам (0 — ACCENT SENSITIVE, 1 — ACCENT SENSITIVE). Таким образом, значение 5 означает, что сравнение не является чувствительным к конечным пробелам и к акцентированным буквам.

у PXW_CYRL атрибуты = 1.
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect debug user SYSDBA password masterkey;
Database:  debug, User: SYSDBA
SQL> select RDB$COLLATION_NAME,
CON>        RDB$COLLATION_ATTRIBUTES
CON>   from RDB$COLLATIONS
CON>  where RDB$COLLATION_NAME in ( 'UNICODE_CI_AI', 'PXW_CYRL_CI_AI' );

RDB$COLLATION_NAME     RDB$COLLATION_ATTRIBUTES
=====================  ========================
UNICODE_CI_AI                                 7
PXW_CYRL_CI_AI                                7

SQL>


Но для PXW_CYRL_CI_AI ACCENT INSENSITIVE почему-то не работает.
Для UNICODE_CI_AI все нормально.
...
Рейтинг: 0 / 0
Литеральный блоб - кодировка character set UTF8
    #39939839
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

я ведь уже говорил, что ДЕКЛАРАЦИЯ к реализации имеет мало отношения. В столбце RDB$COLLATION_ATTRIBUTES - битовая маска декларации.
Для PXW_CYRL она базовая, системная.
Для вашей декларации - да, будет такая, как задекларируете, но вопрос - ЧЕМ обеспечивается accent insensitive.
PolesovДля UNICODE_CI_AI все нормально.
так оно сделано, а не просто задекларировано.
...
Рейтинг: 0 / 0
Литеральный блоб - кодировка character set UTF8
    #39939866
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
так оно сделано, а не просто задекларировано.

Ну, значит, фича, а не бага.
...
Рейтинг: 0 / 0
Литеральный блоб - кодировка character set UTF8
    #39948602
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Апну тему.

kdv

Polesovwhere 'UPPER' collate PXW_CYRL_CI_AI = 'UppeR'
возвращает 1

тут ошибка в том, что вы в имени нового коллэйта указываете и CI И AI, но проверив только на CI, крайне радуетесь.
При этом, работает-ли AI, вы не проверяете.

По идее, в этом случае для коллэйта достатчно было указать только " case insensitive ".
Но оказалось, что " case insensitive " без " accent insensitive " не работает.

Создадим два коллэйта и таблицу с их использованием:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create collation PXW_CYRL_CI for WIN1251
  from PXW_CYRL
  case insensitive;

create collation PXW_CYRL_CI_AI for WIN1251
  from PXW_CYRL
  case insensitive
accent insensitive;

create table T (
    CI     varchar(10) collate PXW_CYRL_CI,
    CI_AI  varchar(10) collate PXW_CYRL_CI_AI
);

insert into T (
    CI,
    CI_AI )
values (
    'zZяЯёЁ',
    'zZяЯёЁ' );
commit;



В запросе по коллэйту без " accent insensitive " условие по " case insensitive " не выполняется.
Код: sql
1.
2.
3.
4.
5.
6.
7.
select count(*)  -- возвращает 0
  from T
 where CI = 'ZZЯЯЁЁ';

select count(*)  -- возвращает 1
  from T
 where CI_AI = 'ZZЯЯЁЁ';
...
Рейтинг: 0 / 0
Литеральный блоб - кодировка character set UTF8
    #39948616
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

вот и прекрасно.
...
Рейтинг: 0 / 0
Литеральный блоб - кодировка character set UTF8
    #39948656
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Polesov,
вот и прекрасно.

Что именно прекрасного-то?
...
Рейтинг: 0 / 0
Литеральный блоб - кодировка character set UTF8
    #39948676
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

я уже говорил, что чарсеты в сервере это не бесконечный конструктор. И полёт вашей мысли для меня недоступен. У чарсета какой-то коллэйт либо есть, либо нет. А то, что декларация позволяет определить коллэйт, которого нет (или не работает) - это, как бы, фича такая.
...
Рейтинг: 0 / 0
Литеральный блоб - кодировка character set UTF8
    #39948703
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,
в данном случае рассматривается создание регистронезависимого коллейта (без "accent insensitive").
Для этого, согласно документации, достаточно указания "case insensitive".
Но "case insensitive" без указания "accent insensitive" не работает.
Вот что по этому поводу сказал hvlad 8873774 .
Но для Вас, видимо, "полет моей мысли" недоступен.
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Литеральный блоб - кодировка character set UTF8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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