Форум программистов, компьютерный форум, киберфорум
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3

Хранение и использование GUID (UUID_TO_CHAR(gen_uuid()

22.09.2015, 09:41. Показов 6303. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем. Не знаю правильно ли я поступил.
Начал использовать GUID (UUID_TO_CHAR(gen_uuid())) как идентификатор записи, параллельно с первичным ключом (числовое значение). Подумываю перевести первичный на GUID.
Определил для него новый домен
SQL
1
AS VARCHAR(36) CHARACTER SET NONE COLLATE NONE
Вот на счет кодировки у меня сомнения.
Вопросы:
1. Ошибся я с кодировкой?
2. Какие могут быть последствия?
3. Может надо было сам UUID?
4. Если, да, то как?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2015, 09:41
Ответы с готовыми решениями:

Подскажите способ преобразования GUID строчки в GUID тип
Создать GUID и преобразовать в строку легко, а как сделать обратно?

Хранение и использование формул из БД
Здравствуйте Уважаемые форумчане! Подскажите пожалуйста: 1.Как записать формулу из TextBox в Базу Данных (SQL Server)? 2.Как...

Хранение значений в рееестре и их использование
Подскажите как организовать работу с реестром взамен работы с файлами. Результатом работы программы является дерево treeview с большим...

14
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
24.09.2015, 14:21
У меня домен для UUID-полей определен так:
SQL
1
2
3
CREATE DOMAIN DM_UUID AS
CHAR(32) CHARACTER SET OCTETS
COLLATE OCTETS;
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
25.09.2015, 03:39  [ТС]
Также к специальным наборам символов относится OCTETS. В этом случае данные
рассматриваются как байты, которые могут в принципе не интерпретироваться
как символы. OCTETS позволяет хранить бинарные данные и/или результаты
работы некоторых функций Firebird.
Какое значение у тебя хранится? без символов "-"?
SQL
1
SELECT gen_uuid(), uuid_to_char(gen_uuid()), CHAR_LENGTH(uuid_to_char(gen_uuid())) FROM rdb$database
GEN_UUIDUUID_TO_CHARCHAR_LENGTH
ят `ђkiO’ †?2ЛnЛD12029C7-BA27-DD44-A93E-C3729BC10C1836
Как используешь данный столбец? Как первичный?

Добавлено через 16 минут
NONE Нейтральная кодовая страница.
Перевод в верхний регистр выполняется только для кодов ASCII 97–122.
Постарайтесь сделать так, чтобы этот набор символов никогда не появлялся в столбцах ваших баз данных.
Получается мне надо от него избавиться?! Если изменить свой домен на
SQL
1
CHAR(36) CHARACTER SET OCTETS COLLATE OCTETS
- тяжелые будут последствия?
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
25.09.2015, 08:14
Да, у меня что-то типа D12029C7-BA27-DD44-A93E-C3729BC10C18, но без дефисов. Итого 32 символа.
Используется для связи с 1С. Это текстовое представление их 128-битных идентификаторов.

Про последствия смены чарсета на живых данных без понятия.
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
25.09.2015, 08:32  [ТС]
Цитата Сообщение от arni Посмотреть сообщение
Используется для связи с 1С
тоже самое будет. Но почему без дефисов? Преобразовываешь?
В 1С "пихаю" именно с дефисами и получаю уникальный идентификатор (хотел сначала строкой, но в моей задаче можно и УИ использовать), а из нее посылаю в БД строковое представление уникального идентификатора (Строка GUID. Строка задается в виде "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX").
Преобразование до 32 символов думаю лишнее.
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
25.09.2015, 09:07
Я их такими (без дефисов) получаю изначально. Собственно у меня как-то сразу не завелось получать от 1Сников данные, я их сам выкачиваю из их mssql базы напрямую.
В свое время помучился, как их хранить, т.к. у них есть тип данных для 128-битных целых, а у нас лишь bigint - 64 бита. Можно почитать про злоключения тут.
В итоге конвертирую в строку таким вызовом функции
SQL
1
CONVERT(CHAR(32), _IDRRef, 2)
что там за третий аргумент - не помню. Но на выходде 32-симольная строка без дефисов.
Потом, когда начал 1Сникам скармливать такие UUID, они побурчали про отсутствие дефисов, но как-то сразу научились добавлять в нужные позиции, или вовсе без них управляются - тут я не вникал.
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
25.09.2015, 09:32  [ТС]
Цитата Сообщение от arni Посмотреть сообщение
Можно почитать про злоключения тут.
Читал когда начинал делать связи.
Я так понимаю ты через свое приложение пишешь/считываешь напрямую в серверную БД 1С?

Добавлено через 1 минуту
А проверка значения столбца есть?
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
25.09.2015, 10:15
Только читаю. Если что-то надо передать в 1С, то 1Сники сами пишут обработки, которые забирают данные из птички.

Про проверку вопроса не понял.
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
25.09.2015, 10:24  [ТС]
проверка значения столбца с доменом DM_UUID есть какая? он же char'овский. чтоб туда лишнего ничего не писалось или пустое
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
25.09.2015, 10:52
Никакой проверки. UUID же не руками заводят. Не вижу смысла что-то проверять.
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
25.09.2015, 12:06  [ТС]
Мало ли кто потом полезет в БД. Возможно придется и "ручками" вносить/править инфу.
Вот наваял домен
SQL
1
2
3
4
CREATE DOMAIN D_GUID AS
CHAR(36) CHARACTER SET OCTETS
CHECK (COALESCE(VALUE, '00000000-0000-0000-0000-000000000000') SIMILAR TO '_{8}\-_{4}\-_{4}\-_{4}\-_{12}' escape '\')
COLLATE OCTETS;
В тестовой БД подменил домены в двух столбцах. Пришлось удалять первичный ключ, ругнулся на индекс. Изменил домен, сделал опять первичный. Вроде все цело.

Добавлено через 18 минут
можно и так
SQL
1
SIMILAR TO '([0-9]|[A-F]){8}\-([0-9]|[A-F]){4}\-([0-9]|[A-F]){4}\-([0-9]|[A-F]){4}\-([0-9]|[A-F]){12}' escape '\'
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
25.09.2015, 13:01
Склероз шепчет мне, что в CHECK не надо оборачивать VALUE в coalesce(), т.к. проверка с NULL даст NULL, а NULL в чеках не трактуется как FALSE - т.е. допустимое значение
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
25.09.2015, 13:51  [ТС]
Цитата Сообщение от arni Посмотреть сообщение
Склероз шепчет мне
мне тоже такое же шептал, но если убрать coalesce
can't format message 13:198 -- message system code -4.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.
Добавлено через 5 минут
А ... все допер в чем дело CHARACTER SET OCTETS еще раз зазубриваем
Также к специальным наборам символов относится OCTETS. В этом случае данные
рассматриваются как байты, которые могут в принципе не интерпретироваться
как символы
. OCTETS позволяет хранить бинарные данные и/или результаты
работы некоторых функций Firebird.
Добавлено через 2 минуты
Либо кодировку менять либо домен такой иметь. Я склоняюсь к 1-му

Добавлено через 28 минут
arni, что думаешь?
Кстати какая кодировка у тебя в текстовых полях (CHARACTER, COLLATE) ?
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
25.09.2015, 14:51
я думаю, что CHECK не нужен.

вот типичный строковый домен:
SQL
1
2
3
CREATE DOMAIN DM_STR_200 AS
VARCHAR(200) CHARACTER SET WIN1251
COLLATE PXW_CYRL;
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
28.09.2015, 03:46  [ТС]
А если не OCTETS, тогда что использовать? ASCII?

Добавлено через 57 секунд
WIN1251 для кириллицы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2015, 03:46
Помогаю со студенческими работами здесь

Хранение и использование в игре диалогов
Здравствуйте! Пишем с другом простейшую игру, проблема такая: Как лучше хранить и использовать диалоги в игре? Диалоги имеют от 1 до 3...

Хранение и использование id (ключа) таблицы
Здравствуйте, возникла проблема: Например есть 2 таблицы: t1 id(PK) id_user(FK) text -------------------------- 1 ...

Хранение и использование данных в Unity
Доброго времени суток! Пишу простенькую 2d игрушку-тест под Windows. Дело дошло до самой игровой составляющей - На экране сверху-вниз...

Хранение и использование большого количества изображений
Всем привет! Подскажите способ хранения большого количества изображений, чтобы можно было эти изображения удобно использовать. Смотрел...

Хранение и использование знака валюты в БД и отчётах
Здравствуйте. Исходные данные: есть БД, в которой в каждой записи используется определённая валюта. То есть, все денежные поля и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru