|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
Здравствуйте! Столкнулся с некой проблемой. В смежных темах уже что-то проскакивало, но темы довольно старые и как обстоят дела именно сейчас. С учетом потенциально новых тенденций? Суть такова: База UTF8, и простая таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Для поля FIO явно указан домен (если домен не указывать, то автогенерится размер VARCHAR(1216)) Для поля FIO1 FB генерит размер VARCHAR(1200). На мой взгляд, явная ошибка в вычислениях (предполагаю, что размер строки умножается на 4). Но ведь VARCHAR(100) это 100 code-point, в совсем грубом приближении, это 100 символов. а уж сколько байт надо выделить под эти символы - совсем другая история. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 09:18 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
FedorinoFF, как проверял размер? На какой версии сервера? Что будет если вместо вычисляемого поля проверить размер в запросе или вьюхе? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 09:38 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
Симонов Денис, Да, виноват, не написал. Проверял через IBExpert (как проверить через ISQL не нашел) Сервер WI-V6.3.3.26780 Firebird 2.5 Если сделать через запрос, то размер калькулироемого поля VARCHAR(304). В запросе из VIEW - VARCHAR(304). В описании структуры (вкладка Fields) VIEW - VARCHAR(1216). Похоже IBExpert подвирает. но если можно еще как-то проверить - подскажите как. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:10 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
FedorinoFFПохоже IBExpert подвирает. но если можно еще как-то проверить - подскажите как. В RDB$FIELDS найти домен этого поля и посмотреть. Но это эксперт врет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:28 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
насколько помню, rdb$character_length сервером не заполняется в данном случае. При этом главное (rdb$field_length) заполнено правильно, поэтому на скорость не влияет все работает как ожидается. Т.е. проблема исключительно в визуализации метаданных и их выгрузке. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:34 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
IBExpert, Докладываю. через isql создал поле . пошел в системные таблицы и обнаружил там VARCHAR(1216). запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Сюжет все более запутывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:38 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
FedorinoFFДокладываю. через isql создал поле . пошел в системные таблицы и обнаружил там VARCHAR(1216). RDB$FIELD_LENGTH - это длина в байтах, она и должна быть 1216. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:47 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
FedorinoFF, На самом деле, все интересно. Если создать поле с явным указанием типа, то RDB$FIELDS.RDB$FIELD_LENGTH = 440, RDB$FIELDS.RDB$CHARACTER_LENGTH = 110 все честно. НО!, если не указывать тип поля при создании (FIO1), то получаем RDB$FIELDS.RDB$FIELD_LENGTH = 1216, RDB$FIELDS.RDB$CHARACTER_LENGTH = 0 И вот тут и есть проблема, ИМХО, которая начинает путать всех. два поля Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:50 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
IBExpertFedorinoFFДокладываю. через isql создал поле . пошел в системные таблицы и обнаружил там VARCHAR(1216). RDB$FIELD_LENGTH - это длина в байтах, она и должна быть 1216. да, уже понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:53 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
FedorinoFFИ вот тут и есть проблема, ИМХО, которая начинает путать всех этот баян есть в трекере ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 10:58 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
dimitrFedorinoFFИ вот тут и есть проблема, ИМХО, которая начинает путать всех этот баян есть в трекере Да, нашел, похоже вот этот вариант Bug with COMPUTED BY fields Но потом решил, что так задумано, чтоб отличать автоматическое вычисление типа от явно заданного. А при всяких отображениях в менеджерах, типа IBExpert, этот факт нужно учитывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 11:20 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
FedorinoFF, попробовал через isql. Но там тоже выводится в байтах Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
P.S. dimitr, а можно в help set добавить справку о sqlda_display, а также вывод о его текущем значении в команде set? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 11:46 |
|
UTF база, автоматический размер для COMPUTED BY поля
|
|||
---|---|---|---|
#18+
Симонов Дениса можно в help set добавить справку о sqlda_display, а также вывод о его текущем значении в команде set? оно сознательно недокументировано. Раньше это была фича только для разработчиков сервера и компилировалась только для дебаг-билдов. Потом ее открыли и для продакшен-билдов, но все равно это слишком низкоуровневая штука для рядового юзера. К тому же вывод может плавать от версии к версии, в тройке там вообще много поменялось. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2015, 14:01 |
|
|
start [/forum/topic.php?fid=40&fpage=72&tid=1562662]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 261ms |
total: | 379ms |
0 / 0 |