powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
6 сообщений из 6, страница 1 из 1
UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
    #38502491
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Есть база (приведен результат isql -x):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SET SQL DIALECT 3;

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

/*  Character sets */
ALTER CHARACTER SET UTF8 SET DEFAULT COLLATION UNICODE_CI;

/* Table: TC, Owner: SYSDBA */
CREATE TABLE TC (C CHAR(1) CHARACTER SET UTF8);


Далее делаю коннект в консоли с локалью UTF8, чарсет коннекта равен также UTF8: isql -ch utf8 utfdatabase.fdb
И ввожу две строки:
Код: plaintext
1.
2.
3.
4.
5.
SQL> show table tc;
C                               CHAR(1) CHARACTER SET UTF8 Nullable
SQL> insert into tc values('R');
SQL> insert into tc values('Ы');
SQL> commit;
SQL> quit;

Допустим, есть:
Запрос-1:
Код: sql
1.
select a.c, iif(lower(a.c)=upper(a.c),'ci', 'cs') t_sens from tc a;

Запрос-2:
Код: sql
1.
2.
select a.c, iif(lower(a.c)=upper(a.c),'ci', 'cs') rdb_sens 
from (select 'R' c from rdb$database union all select 'Ы' from rdb$database) a;



Результаты запросов для коннекта с чарсетом = UTF8 :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select c, iif(lower(a.c)=upper(a.c),'ci', 'cs') t_sens from tc a;

C      T_SENS
====== ========
R      ci
Ы     ci

SQL> select a.c,iif(lower(a.c)=upper(a.c),'ci', 'cs') rdb_sens
CON> from (select 'R' c from rdb$database union all select 'Ы' from rdb$database) a;

C      RDB_SENS
====== ========
R      ci
Ы     ci
// эти результаты понятны: базу объявили с collate unicode_ci - ну так и получите-распишитесь, что все константы есть куклы, бесчувственные к регистру.

Результаты запросов для коннекта с чарсетом = WIN1251 :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select c, iif(lower(a.c)=upper(a.c),'ci', 'cs') t_sens from tc a;

C      T_SENS
====== ======
R      ci
Ы      ci

SQL> select a.c, iif(lower(a.c)=upper(a.c),'ci', 'cs') rdb_sens
CON> from (select 'R' c from rdb$database union all select 'Ы' from rdb$database) a;

C      RDB_SENS
====== ======
R       cs 
Ы       cs 
// а вот здесь получается, что константы чувственны к регистру.


Вопрос, собс-но, простой: case-чувственность символьных констант, получаемых из rdb$database, разве должна зависеть от чарсета коннекта, если явно не указывается unicode_ci в карусаднях типа cast(... as varchar(...) character set utf8 collate unicode_ci ) ?

PS. show version для коннекта, выполненного с charset = win1251:
Код: plaintext
1.
2.
3.
4.
5.
ISQL Version: WI-V2.5.3.26722 Firebird 2.5
Server version:
Firebird/linux AMD64 (access method), version "LI-T3.0.0.30792 Firebird 3.0 Alpha 1"
Firebird/linux AMD64 (remote server), version "LI-T3.0.0.30792 Firebird 3.0 Alpha 1/tcp (oel64)/P12"
Firebird/x86/Windows NT (remote interface), version "WI-V2.5.3.26722 Firebird 2.5/tcp (csprog)/P12"
on disk structure version 12.0

Для utf8 версия сервера и клиента одна и та же: LI-T3.0.0.30792.
...
Рейтинг: 0 / 0
UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
    #38502510
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидcase-чувственность символьных констант, получаемых из rdb$database, разве
должна зависеть от чарсета коннекта
Символьный константы, передаваемые с клиента, имеют чарсет коннекта если не указано иное.
От чего ещё чувствительность может зависеть?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
    #38502533
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovконстанты, передаваемые с клиента, имеют чарсет коннекта если не указано иное.фигово %(
хотелось бы, чтобы они, эти "клиентские константы", автоматом кастились к чарсету БАЗЫ.
Вот как в маздае, скажем:
Код: sql
1.
2.
select case when lower(a)=upper(b) then 'ci' else 'cs' end is_sens
from (select 'r' a, 'R' b ) t

output: 'ci'
...
Рейтинг: 0 / 0
UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
    #38502541
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидхотелось бы, чтобы они, эти "клиентские константы", автоматом кастились к
чарсету БАЗЫ.
А потом ещё раз при возвращении на клиент? Назачем? Они будут прикастованы к чарсету поля
или переменной, буде в таковые попадут. Если не попадут - прикастятся в чарсет выходных
буферов (который, случайно так, равен чарсету коннекта).

ТаблоидВот как в маздае
В маздае нет понятия "чарсет конекта" вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
    #38502544
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Таблоид!
You wrote on 16 декабря 2013 г. 17:56:02:

Таблоид> фигово %(
> хотелось бы, чтобы они, эти "клиентские константы", автоматом кастились
> к чарсету БАЗЫ.
> Вот как в маздае, скажем: не надо нам чужих глюков.
у нас свои есть.

зы: все нормальные люди при использовании строковых литералов
указывают чарсет оных в явном виде.

ззы: и чарсет этот не обязан совпадать с дефолтным.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
    #38502557
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ладно, надо будет запомнить эту бяку.
(мну понадобилось тут сверить много чего разного с результатами ms sql, оттого и вопрос был).
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UTF8, collate unicode_CI: чарсет коннекта и case чувствит-ть симв. констант ч/RDB$DATABASE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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