Автор |
Сообщение |
Сообщение создано: 19. 11. 2008 [15:01]
|
Expert
Владимир Тихонов
Создатель темы
Зарегистрирован(а) с: 05.08.2008
Сообщения: 45
|
В случае если создать любой параметр с длинной строкой ID например emul_klap_nagnet_suspenz1, то при сохранение в БД MySQL он его режет примерно до такого вида:
emul_klap_nagnet_sus
что приводит к ошибке при сохранении в БД в случае если есть еще такой же параметр например emul_klap_nagnet_suspenz2, который отличен от предыдущего но при сохранении так же режется и принимает такой же вид (emul_klap_nagnet_sus). По этой причине emul_klap_nagnet_suspenz2 и остальные не сохраняются.
вот лог ошибки которая была видна в терминале:
3|/WorkStation/sub_BD/mod_MySQL/db_Test/ | Ошибка 1 запроса к БД: Duplicate en
try 'emul_klap_nagnet_sus-out' for key 1
ошибку избежать можно если использовать короткие имена, но есть ситуации когда очень много однотипных названий и различить их можно если добавить к ним что то оригинальное для них, что приводит к длинному названию. Реально ли как нибудь исправить это?
[Сообщение редактировалось 1 раз(а), в последний раз 19.11.2008 в 15:03.]
Все глюки Windows исправляются установкой Linux
|
Сообщение создано: 19. 11. 2008 [18:33]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
Как его исправишь? Ключ бесконечной длины быть всёравно не может. Ограничивайте идентификаторы.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 19. 11. 2008 [21:54]
|
Expert
Владимир Тихонов
Создатель темы
Зарегистрирован(а) с: 05.08.2008
Сообщения: 45
|
roman wrote:
Как его исправишь? Ключ бесконечной длины быть всёравно не может. Ограничивайте идентификаторы.
ясно, понял, не дурак. Просто хотел спросить у ВАС как у РАЗРАБОТЧИКА ибо не имею таких познаний!!! Имел бы, сделал бы наверное свою скаду)))) Спасибо за столь скорый и внятный ответ! В принципе уже нашли выход писать не длинные ИД, хотя было бы неплохо иметь кое где и длинные!
Все глюки Windows исправляются установкой Linux
|
Сообщение создано: 20. 11. 2008 [07:31]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
Нормально было бы увеличить длину строки раза в 3. А также предупреждать пользователя в UI при введении слишком длинного Id или обрезать сразу при вводе строки пользователем.
Появление данной ошибки (по неосторожности может произойти с любым пользователем) приводит в краху (глюкам) БД MySQL всего проекта.
Пользователь, который работает в GUI и не заглядывает в командную строку, продолжает работать не замечая этой ошибки.
[Сообщение редактировалось 3 раз(а), в последний раз 20.11.2008 в 07:59.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 20. 11. 2008 [09:19]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
Увеличить можно. А вот с контроллем есть проблемы. Проблемы связаны с тем, что разные БД по разному хранят тот-же UTF, кроме того при привышении общей длины ключа таблицы, могут принудительно длины всех ключевых полей уменьшаться.
Следовательно я незнаю реального ограничения длины поля БД, особенно для кирилицы на UTF.
Принимаю предложения, в каких местах хотелось-бы иметь идентификаторы побольше?
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 20. 11. 2008 [15:11]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
Речь идет обо всех идентификаторах OpenSCADA, но реально столкнулись на логическом уровне и в блочном вычислителе (здесь дерево проекта разрастается наиболее интенсивно).
64 символа (128 байт в UTF) я думаю было бы достаточно чтобы задать любые идентификаторы. По умолчанию MySQL рассматривает 1120 байтов ключа.
Вопрос: другие БД поддержат 64 символа?
Еще вопрос: при увеличении длины быстродействие БД пострадает только у пользователей, использующих длинные идентификаторы или у всех?
Еще вопрос: есть ли возможность жестко ограничить кол-во символов (допустим 63) в виджете OpenSCADA, в котором вводятся идентификаторы объектов?
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 21. 11. 2008 [11:54]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
almaz wrote:
Речь идет обо всех идентификаторах OpenSCADA, но реально столкнулись на логическом уровне и в блочном вычислителе (здесь дерево проекта разрастается наиболее интенсивно).
64 символа (128 байт в UTF) я думаю было бы достаточно чтобы задать любые идентификаторы. По умолчанию MySQL рассматривает 1120 байтов ключа.
Вопрос: другие БД поддержат 64 символа?
Поддерживают
almaz wrote:
Еще вопрос: при увеличении длины быстродействие БД пострадает только у пользователей, использующих длинные идентификаторы или у всех?
Скорее всего только при больших идентификаторах. А вот размер БД точно увеличится ибо многие под тип данных char[120] зарезервируют все 120 символов.
almaz wrote:
Еще вопрос: есть ли возможность жестко ограничить кол-во символов (допустим 63) в виджете OpenSCADA, в котором вводятся идентификаторы объектов?
Ограничить можно.
Ещё одна неприятная особенность. Если я все идентификаторы сделаю размером 63, то скажем ранее созданные файловые архивы значений потеряются. Ибо внутри них, в жесткой структуре, зарезервировано 20 символов на идентификатор архива. Который, кстати, формируется из идентификатора параметра и атрибута. А если каждый из них по 63, то это уже получится 126!
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 21. 11. 2008 [20:15]
|
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
|
Тогда лучше оставить как есть 20 символов, а для детального описания параметров есть поля Name и Description.
Единственная просьба: сделать жесткое ограничение в 20 символов в поле ввода идентификатора нового объекта, т.е чтобы пользователь не смог вбить более 20 символов идентификатора.
Данное ограничение поможет избежать неприятностей при работе над проектами.
Еще вопрос: ограничение в 20 символов для идентификатора действует по всей OpenSCADA или эта цифра разная в различных модулях?
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Сообщение создано: 22. 11. 2008 [20:38]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
almaz wrote:
Тогда лучше оставить как есть 20 символов, а для детального описания параметров есть поля Name и Description.
Единственная просьба: сделать жесткое ограничение в 20 символов в поле ввода идентификатора нового объекта, т.е чтобы пользователь не смог вбить более 20 символов идентификатора.
Данное ограничение поможет избежать неприятностей при работе над проектами.
OK
almaz wrote:
Еще вопрос: ограничение в 20 символов для идентификатора действует по всей OpenSCADA или эта цифра разная в различных модулях?
Это значение размера ключевого поля "ID" таблиц БД. У каждой таблицы это значение может быть собственное. Вот только разные значения размера поля "ID" нужно будет научить конфигуратор и другие UI воспринимать.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 24. 11. 2008 [18:35]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
В первом приближении ограничение ввода идентификатора сделал.
А вообще это отдельная работа, которая заключается в проверке границ всех переменных доступных пользователю.
Если найдутся ещё проблемами с границами - сообщайте. Будем поэтапно, помере проявления, фиксить.
Learn, learn and learn better than work, work and work.
|