|
Литеральный блоб - кодировка 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 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
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.
Но для PXW_CYRL_CI_AI ACCENT INSENSITIVE почему-то не работает. Для UNICODE_CI_AI все нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 08:44 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesov, я ведь уже говорил, что ДЕКЛАРАЦИЯ к реализации имеет мало отношения. В столбце RDB$COLLATION_ATTRIBUTES - битовая маска декларации. Для PXW_CYRL она базовая, системная. Для вашей декларации - да, будет такая, как задекларируете, но вопрос - ЧЕМ обеспечивается accent insensitive. PolesovДля UNICODE_CI_AI все нормально. так оно сделано, а не просто задекларировано. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 12:39 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
kdv так оно сделано, а не просто задекларировано. Ну, значит, фича, а не бага. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2020, 14:33 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Апну тему. 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.
В запросе по коллэйту без " accent insensitive " условие по " case insensitive " не выполняется. Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 16:14 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesov, вот и прекрасно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 17:58 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
kdv Polesov, вот и прекрасно. Что именно прекрасного-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 20:05 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
Polesov, я уже говорил, что чарсеты в сервере это не бесконечный конструктор. И полёт вашей мысли для меня недоступен. У чарсета какой-то коллэйт либо есть, либо нет. А то, что декларация позволяет определить коллэйт, которого нет (или не работает) - это, как бы, фича такая. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2020, 21:27 |
|
Литеральный блоб - кодировка character set UTF8
|
|||
---|---|---|---|
#18+
kdv, в данном случае рассматривается создание регистронезависимого коллейта (без "accent insensitive"). Для этого, согласно документации, достаточно указания "case insensitive". Но "case insensitive" без указания "accent insensitive" не работает. Вот что по этому поводу сказал hvlad 8873774 . Но для Вас, видимо, "полет моей мысли" недоступен. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2020, 00:33 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560376]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
134ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 260ms |
total: | 511ms |
0 / 0 |