|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Привет всем. Создание базы и подключение character set WIN1251 Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Для B_UTF8 кодировка UTF8, для B_1251 - WIN1251. Без указания character set кодировка по умолчанию UTF8. Это так и должно быть? С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 10:38 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
20.03.2020 10:38, Polesov пишет: > Без указания character set кодировка по умолчанию UTF8. > Это так и должно быть? что показывает SELECT RDB$CHARACTER_SET_NAME FROM RDB$DATABASE ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 10:41 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Мимопроходящий, UTF8. Осталось выяснить, кто и как создавал БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 10:52 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesov, а смысл? Чем utf-8 не устраивает? Указание при подключении WIN1251 вполне себе позволяет работать с UTF-8 БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 10:54 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Симонов Денис, для UTF8 не все кастомные collate применимы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 10:57 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesov, версия ФБ какая? Мой склероз говорит, что в старых версиях ФБ был какой-то трабл с перекодировкой текстовых блоб, если в него были записаны данные, не соответствующие кодировке БД и коннекта. А насчет вопроса - я не понял, в чем проблема-то. Дефолтная кодировка БД utf8, значит и у блоба такая кодировка, значит при коннекте в ютф8 не должно быть вообще никаких проблем. Перекодировка происходит только если чарсет коннекта и чарсет столбца отличаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 10:57 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
kdv Дефолтная кодировка БД utf8 Ожидалось, что она должна быть WIN1251. Ну, при применение collate см. выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:00 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
какая-то бессмысленная вьюха. Надо 1251 поднимай копнект в 1251 и читай, будет 1251. Надо утф, то то же самое и для него: поднимай коннект в утф и получишь утф. Если там фактически русские буквы, то проблем нет при любом сочетании чтение-хранение. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:00 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky какая-то бессмысленная вьюха Это просто для воспроизведения. Ivan_Pisarevsky Надо 1251 поднимай копнект в 1251 и читай, будет 1251 Не будет. Пример: В RDB$DATABASE RDB$CHARACTER_SET_NAME = 'UTF8' Подключимся к БД с WIN1251 и создадим коллейт Код: sql 1. 2. 3. 4.
Попытаемся выполнить запрос Код: sql 1. 2.
Получаем Код: powershell 1. 2. 3. 4. 5.
P.S. Не указал - FB2.5.9 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:07 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
PolesovПодключимся к БД с WIN1251 и создадим коллейт зачем? В UTF-8 есть вполне себе штатный коллейт UNICODE_CI_AI ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:14 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesov, и вообще зачем вам в блобах регистро нечувствительный коллейт? Что вы там такое с блобом делаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:16 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Симонов Денис В UTF-8 есть вполне себе штатный коллейт UNICODE_CI_AI В данном случае, тот, кто создавал базу, почему-то вместо WIN1251 указал кодировку UTF8. Видимо, ошибка. А так да, можно (и нужно) использовать другой коллейт. Получается, приведение к blob sub_type text не зависит от кодировки коннекта, а зависит от кодировки БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:18 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Симонов Денис зачем вам в блобах регистро нечувствительный коллейт? Э-э-э... Даже не знаю, что на это ответить ) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:21 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
20.03.2020 11:18, Polesov пишет: > > Получается, приведение к *blob sub_type text* не зависит от кодировки коннекта, а зависит от кодировки БД. все СОЗДАВАЕМЫЕ поля, если для них не указывать кодировку явно, имеют кодировку RDB$CHARACTER_SET_NAME из RDB$DATABASE, независимо от того, с какой кодировкой ты приконнектился. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:34 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
PolesovПопытаемся выполнить запрос бессмыслица. Коллэйт применим только к кодировке столбца. Указать коллейт от балды нельзя. То есть, для столбца с кодировкой А можно указывать только те коллэйты, которые есть для кодировки А, но не для кодировки Б. Впрочем, и созданный "регистронечувствительный коллейт" к win1251 - тоже бредятина. Откуда он возьмется? Его физически для win1251 не существует. p.s. кстати, я понял - в исходном сообщении и описана вот та самая фигня, что автоматом блоб в кодировку коннекта не перекодируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:49 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Сдается мне у автора в голове каша на предмет: 1. Как текстовые данные хранятся. 2. Как те же самые данные отдаются клиенту. Внезапно, сервер вполне себе умеет совместимые кодировки друг в друга перекодировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 11:53 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Мимопроходящий все СОЗДАВАЕМЫЕ поля, если для них не указывать кодировку явно, имеют кодировку RDB$CHARACTER_SET_NAME из RDB$DATABASE, независимо от того, с какой кодировкой ты приконнектился. Мне кажется, что литеральные значения составляют исключение. В RDB$DATABASE UTF8, подключаемся с WIN1251 Код: sql 1. 2. 3. 4. 5. 6.
В данном случае QUERTY WIN1251; Если подключиться с другим чарсетом, и создать аналогичную вью, то у поля будет чарсет подключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 14:05 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
kdv Впрочем, и созданный "регистронечувствительный коллейт" к win1251 - тоже бредятина. От чего же бредятина? Коллейт создается штатными средствами. kdv та самая фигня, что автоматом блоб в кодировку коннекта не перекодируется. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 14:06 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky Внезапно, сервер вполне себе умеет совместимые кодировки друг в друга перекодировать. Только речь не про это. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 14:08 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
PolesovОт чего же бредятина? Коллейт создается штатными средствами. от того, что таблица сортировки символов из воздуха не возьмётся. Например, как ДЕКЛАРАЦИЯ может обеспечить одинаковость поиска на "е" и "ё"? Каким образом движок узнает, что эти символы эквивалентны? Потому что кто-то написал CASE INSENSITIVE ACCENT INSENSITIVE; ??? Я уж не говорю о том, что код символа ё и его порядок в алфавите в utf8 и win1251 отличается. p.s. как я понимаю, мы не спорим, что сортировку от одного чарсета нельзя пристегнуть к другому чарсету, так? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 14:27 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
kdv как ДЕКЛАРАЦИЯ может обеспечить одинаковость поиска на "е" и "ё"? Понятно, что "е" и "ё" не будут сравниваться одинаково, но такой коллейт позволяет при сравнении игнорировать различия в регистре символов. И при сортировке буква "ё" займет правильную позицию. И, кстати, сравнение через регистронезависимый коллейт работает быстрее, чем сравнение upper( FIELD ) = upper( :VALUE ) kdv p.s. как я понимаю, мы не спорим, что сортировку от одного чарсета нельзя пристегнуть к другому чарсету, так? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 14:35 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesovно такой коллейт позволяет при сравнении игнорировать различия в регистре символов. насколько мне известно, такой коллэйт один - и это UNICODE_CI_AI для UTF8. (я про равнозначность е, ё, Е, Ё). Коллэйт, который игнорирует регистр букв, есть почти у всех кодировок, по умолчанию, тут создавать ничего не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 14:53 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
kdv Polesovно такой коллейт позволяет при сравнении игнорировать различия в регистре символов. Коллэйт, который игнорирует регистр букв, есть почти у всех кодировок, по умолчанию, тут создавать ничего не надо. Посмотрим, какие коллейты по умолчанию есть для WIN1251: Код: sql 1. 2. 3. 4.
Получаем три значения WIN1251 PXW_CYRL WIN1251_UA Проверим эти коллейты Код: sql 1. 2. 3.
Для всех трех коллейтов запрос возвращает 0 Создадим коллейт Код: sql 1. 2. 3. 4.
Запрос Код: sql 1. 2. 3.
возвращает 1 Ы-ы-ы? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 15:16 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesov, здесь видимо, срабатывает только CASE INSENSITIVE. А вот так Код: sql 1. 2. 3.
оно, по идее, и не должно давать результат. Потому что коллэйт сам по себе не переводит строку в upper. Он влияет разве что на сортировку. И, видимо, исходно PXW_CYRL не case insensitive. Polesovwhere 'UPPER' collate PXW_CYRL_CI_AI = 'UppeR' возвращает 1 тут ошибка в том, что вы в имени нового коллэйта указываете И CI И AI, но проверив только на CI, крайне радуетесь. При этом, работает-ли AI, вы не проверяете. Называть коллэйт надо было типа PXW_CYRL_TEST, а потом уже, после всех проверок, радоваться что движок обеспечивает и CI и AI, или не радоваться, если он что-то не обеспечивает. См. http://www.ibase.ru/unicode_faq/ "Какие есть сортировки (collate) для UTF8?" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 19:30 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2020, 19:37 |
|
|
start [/forum/topic.php?fid=40&msg=39939442&tid=1560376]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
127ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 241ms |
0 / 0 |