|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Всем привет. Есть база данных, созданая с чарсетом ISO8859_1. В новой версии развитие нашей программы был сделан переход на UTF8. Поэтому в программе установки запускается специальный скрипт, который с помощью команды alter ссоздает временный столбец, в него копирует данные из столбца с кодировкой ISO8859_1, удаляет старый столбец, создает новый, копирует данные из временного столбца и удаляет временный столбец. Таким образом обрабатывается не одна таблица, а довольно много. В чем возникла проблема: обнаружилось, что у некоторых таблиц такие обновления проходят не так гладко. Например если в конвертируемом столбце есть многобайтные символы типа 'µ', национальных символов каждой страны и есть подозрения на символ '%'. Вместимость столбца 100 байт (VARCHAR(100) CHARACTER SET UTF8) Строка содержит допустим 40 байт и спецсимвол. Если же сделать select прямо из таблицы, то получим Arithmetic exception. Иногда прямой селект проходит нормально, но вот в связанной view выкидывает Arithmetic exception. При попытке сделать insert или update с такими данными получаем Arithmetic exception. Самое непонятное в этом то, что в одних таблицах все нормально с этим, в других постоянно проблема. Приходится после апдейта проводить подобную конвертацию руками повторно. Что посоветуете делать? Используется FB 2.5.5 как SuperServer, под Win7 или Win10. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 09:34 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svd, Временно увеличьте "Вместимость столбца" в 4 раза. А после конвертации можете вернуть обратно размер поля. Проверено и не раз. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 09:54 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
varchar(100) это байты и "паспортная" вместимость такого столбца - 25 юникодных символов . Ну и 2.5. 5 - странно, как минимум. Суперсервер - тоже странно, но, может быть, у вас тот редкий сценарий когда это осмысленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 09:56 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
AltHasp, Так и делается. временный столбец содержит 1000 байт. изначально на тестах я и основной столбец увеличил как и временный - для программы это не критично тем, что внутри используются форматированные данные фиксированной длинны (записи типа record). Но вот шеф настоял, что бы все вернулось в порядок. Пришлось в скрипт при обратном копировании добавить substring. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 10:07 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, все бы хорошо, но несходится с логикой: при вмстимости столбца 100 символов, 39 символов идут как однобайтные и 'µ' идет в двухбайтной кодировке. по поводу смены версии сервера вопрос трудный. Для этого нужны веские основания. Вероятно так и произойдет, если мне удастся доказать, что новая версия как раз и исправляет подобные проблемы. Используется то, что длительное время тестировалось. Клиентов около тысячи, обновления проводим не мы, а лучше сказать "другая фирма", которую невозможно заставить просто так обновить сервера базы данных у клиентов. Поэтому этим занимается программа установки, которую мого раз тестируют, пока она попадет в отдел поддержки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 10:20 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Basil A. Sidorov varchar(100) это байты и "паспортная" вместимость такого столбца - 25 юникодных символов . С чего это вдруг? varchar(100) - это 100 символов, RDB$FIELD_LENGTH у такого поля будет 400. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 10:22 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svd по поводу смены версии сервера вопрос трудный. P.S. Про "требуется бэкап-рестор" - в курсе, но сколько их на все выпуски? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 10:49 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
IBExpert, это в теории. На практике, проводя конвертацию, я создавал временные столбцы сначала той же длины, что и оригинал. В результате получал при update исключение arithmetic exception. потом tmp увеличил вдвое, но нашлись пользователи у которых и 200 не прокатывало. Тогда уже задал для tmp 1000 и все пошло более менее нормально, пока у французов не нашлись данные, где помогло только 3000 и времени на решение было 5 минут. Естественно уже 1000 была в официальном пакете обновлений, а этих французов пометили как особых личностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 10:52 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
AltHasp svd, Временно увеличьте "Вместимость столбца" в 4 раза. А после конвертации можете вернуть обратно размер поля. Проверено и не раз. Удачи! как вы это делаете? команду можете указать, чтоб внести ее в скрипт? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 10:54 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svd В чем возникла проблема: обнаружилось, что у некоторых таблиц такие обновления проходят не так гладко. Например если в конвертируемом столбце есть многобайтные символы типа 'µ', национальных символов каждой страны и есть подозрения на символ '%'. svd Вместимость столбца 100 байт (VARCHAR(100) CHARACTER SET UTF8) svd На практике, проводя конвертацию, я создавал временные столбцы сначала той же длины, что и оригинал. В результате получал при update исключение arithmetic exception. потом tmp увеличил вдвое, но нашлись пользователи у которых и 200 не прокатывало. Тогда уже задал для tmp 1000 и все пошло более менее нормально, пока у французов не нашлись данные, где помогло только 3000 и времени на решение было 5 минут. Воспроизводимый пример поможет разобраться в этом безобразии. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 11:02 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Версии??? С каких пор "выпуск (обновлений)" стал "сменой версии"? P.S. Про "требуется бэкап-рестор" - в курсе, но сколько их на все выпуски? Выпуск обновлений теоретически может привести к отказу системы. С нашим комплектом идет управление роботом. За простой приходится платить деньгами. ПС: Обновление - довольно сложный процесс. И базы данных (их две)- только некоторая часть из этого. С базами делается следущие манипуляции: удаление всех зависимостей (триггеров, процедур, функций), изменение для utf8, сравнение базы со скриптом на изменение метаданных, исполнение всяких вспомогательных скриптов, меняющие данные в таблицах, Бэкап - рестор баз данных. И только в конце, опционально, идет смена сервиса базы данных, и то, если человек это кликнул - по умолчанию это не активно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 11:55 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
[quot hvlad#22181328] svd Звучит как ужас-ужас. Кто-то где-то что-то делал не так. Воспроизводимый пример поможет разобраться в этом безобразии. Выглядит это так: Код: plsql 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
К сожалению, последнюю таблицу, которая виновата была, пока я был в коллеги выкинули из списка и просто ее дропают. В ней данные, которые частично востанавливаются из скрипта, если они нужны. В данный момент это помогло, но сама практика не очень хорошая. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:35 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svdЕсть база данных, созданая с чарсетом ISO8859_1. svdесть многобайтные символы типа 'µ', национальных символов каждой страны svdСамое непонятное в этом то, что в одних таблицах все нормально с этим, в других постоянно проблема. А теперь вопрос на засыпку: национальные символы каких стран представлены в ISO8859_1 и каких стран - занесены в поле? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:44 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svd, я не знаю, что такое "execute statement" в какой тр-ции\коннекте оно выполняется и зачем оно тут вообще нужно. Мне кажется подозрительным использование одного и того же имени tmp_utf для всех потребностей. Кроме того, такой подход не позволяет конвертировать более одного поля на таблицу за один раз и заставляет делать несколько апдейтов вместо одного. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:22 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А теперь вопрос на засыпку: национальные символы каких стран представлены в ISO8859_1 и каких стран - занесены в поле? Изначально были только Европейские (Испанский, Французский, Немецкий, Итальянский, Турецкий, Польский, Португалский, Нидерландский). потом 6 лет назад встал вопрос о китайском и арабском. Потому сделали перевод только необходимых столбцов для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 12:27 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
hvlad svd, я не знаю, что такое "execute statement" в какой тр-ции\коннекте оно выполняется и зачем оно тут вообще нужно. Мне кажется подозрительным использование одного и того же имени tmp_utf для всех потребностей. Кроме того, такой подход не позволяет конвертировать более одного поля на таблицу за один раз и заставляет делать несколько апдейтов вместо одного. Именно так. Весь перенос делался не за один день, а по мере перевода разных часте программ и Интерфейсов на Юникод (миграция с Дельфи 2007 на ХЕ8). Как только провека работоспособности интерфейсов подтверждалась протоколами и рапортами клиентов, внесенные изменения фиксировались. Я опубликовал только часть скрипта. На самом деле меняются много таблиц. И только пятая часть из списка имеет более одного столбца с utf8. Разработка ведется разными людьми, сегодня задание на перевод интерфейса может быть у меня, завтра у другого сотрудника. Начальник отдела зставляет все делать по шагам (и я, например, исходя из жизненного опыта, нахожу это правильным). В случае проблемы с одним столбцом придется откатывать все изменения. Кроме того ему не нравится "коренные изменения типа оптимизации кода" - тогда трудно найти "что пошло не так" после очередного внесения изменений. Обновление программ (и структур баз) производим не мы. Гораздо удобней получить рапорт, что именно такой то столбец в такой то таблице не прошел, чем неверны все данные в таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 12:44 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
hvlad, Еще к тому же мен кажется странным, что клиенты проде из одного региона, у одних такой эффект может проявиться, у других нет. Компьютеры у них у всех одного промышленного типа, различаться могут по процессорам и памятью на борту только. Операционка со всеми программами устанвливается из единого образа - по идее отличий быть не должно в принципе. но происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 12:48 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svd, много слов, но ничего полезного для понимания причин исходной проблемы, увы. Итого: без воспроизводимого примера мне тут сказать больше нечего. Ну и 2.5.5 давно нужно заменить на 2.5.9 (как минимум). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 12:59 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svd, я бы посоветовал 2.5.5 обновить до 2.5.9, или по крайней мере посмотреть release notes, были-ли какие-то баги исправлены между этими версиями в отношении юникода. По крайней мере в 2.5.1 однозначно были баги с сортировкой (см. раздел "Регистронезависимый поиск" в http://www.ibase.ru/unicode_faq/ , там красным выделено, и указаны 3 бага). Насчет "ошибок после переноса столбцов" - у вас там точно это через дисконнект-коннект делается? Вдруг висел какой-то коннект, который не давал обновить метаданные в памяти. У суперсервера 2.5 кэш метаданных общий. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 13:02 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svdЕще к тому же мен кажется странным, что клиенты проде из одного региона, у одних такой эффект может проявиться, у других нет. Ничего странного. У одних в базе есть буквы, не укладывающиеся в ISO 8859-1, у других - нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 13:19 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
kdv svd, я бы посоветовал 2.5.5 обновить до 2.5.9, или по крайней мере посмотреть release notes, были-ли какие-то баги исправлены между этими версиями в отношении юникода. По крайней мере в 2.5.1 однозначно были баги с сортировкой (см. раздел "Регистронезависимый поиск" в http://www.ibase.ru/unicode_faq/ , там красным выделено, и указаны 3 бага). Вроде смотрел, но не все: с версии 2.5.5 и выше - вроде бы ничего подобного не нашел, хотя нашел в бэг-треккере одиин рапорт о проблемах имен хранимых процедур при utf8. (версия 2.5.7) Но вроде как не подтвердилась, после перехода на другую версию. kdv Насчет "ошибок после переноса столбцов" - у вас там точно это через дисконнект-коннект делается? Вдруг висел какой-то коннект, который не давал обновить метаданные в памяти. У суперсервера 2.5 кэш метаданных общий. Обновление производится специальной программой на копиях баз данных - копируются в локально доступные папки, перед каждым шагом сервис стартует, после выполнения шага сервис останавливается. Правда выполнение скриптов производится в одном шаге запуска сервиса, а вот выполнение каждого скрипта в отдельной конекции. После операции бэкап-рестор подготовленные базы копируются вместе с другими файлами на свое рабочее место(этот шаг выполняется в не контекста обновления баз и если базы не обновились, то и опреация не производится, и обновление не применяется на рабочей машине). То есть в период обновления у программы обновления единичный(но не монопольный) доступ к базам. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 13:28 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Ничего странного. У одних в базе есть буквы, не укладывающиеся в ISO 8859-1, у других - нет. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Я вот как то не нашел в данном инсерте ни одного многобайтного символа. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 13:30 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Ничего странного. У одних в базе есть буквы, не укладывающиеся в ISO 8859-1, у других - нет. Дополнение: Причем столбец Name имеет UTF8 кодировку. Остальные ISO ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 13:35 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
svdПричем столбец Name имеет UTF8 кодировку. А вот тут-то и грабельки: в него вполне могли запихать больше букв, чем разрешено, поскольку Firebird в старых версиях проверяет только лимит в байтах, а в новых - ещё и в буквах. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 13:50 |
|
FB 2.5.5 проблема со столбцами UTF8
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, НЕ может быть. Такие грабельки уже проверяли и исправляли. Только не в данном случае. В столбце объявлено 100 символов utf8, в запросе заносится 36. Столбец Artikelcode имеет размер 20 ISO8859_1. там 8 цифер всего. Остьльные строковые значения пустые. Где внесены даты и время - используются соотвественные столбцы Код: plsql 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. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 14:23 |
|
|
start [/forum/topic.php?fid=40&fpage=7&tid=1560059]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 237ms |
total: | 521ms |
0 / 0 |