Рассчитать размер строки в UTF-8 при преобразовании из Latin-9 (ISO/IEC 8859-15)

У нас есть программа jdbc, которая перемещает данные из одной базы данных в другую.

  1. Исходная база данных использует набор символов Latin9
  2. База данных назначения использует кодировку UTF-8, а размер столбца указывается в байтах, а не в символах.
  3. Мы преобразовали ddl-сценарии исходной базы данных в эквивалентный сценарий в целевой базе данных, сохранив размер столбца как есть.
  4. В некоторых случаях, если есть некоторые специальные символы, размер данных после преобразования в UTF-8 превышает размер столбца в целевой базе данных, что приводит к сбою программы jdbc.

Я понимаю, что UTF-8 - это схема кодирования с переменной шириной, которая может занимать 1-4 байта на символ, учитывая, что наихудшим решением будет выделение в 4 раза размера столбца в целевой базе данных.

Есть ли лучшая оценка?

2 ответа

Поскольку заранее неизвестно, сколько именно будет расти текстовая строка, я думаю, что все, что вы можете сделать, - это пробный запуск, чтобы преобразовать текст в UTF-8 и сгенерировать предупреждение о том, что определенные столбцы необходимо увеличить в размере. Любые символы ASCII (без акцента) останутся однобайтовыми, и большинство символов с акцентом на латинице 9, вероятно, будут по 2 байта каждый, но есть некоторые, которых может быть 3. Вам нужно взглянуть на таблицы Latin-9 и UTF-8. чтобы увидеть, будет ли 3 или 4 байта после преобразования. Тем не менее, вам придется изучить текст на латинице-9, чтобы увидеть, насколько он будет расти.

Символ евро в латинице-9 занимает 3 байта для представления в utf-8. Символы ascii будут занимать только 1 байт. Оставшиеся 127 символов занимают 2 байта. В зависимости от того, что является реальным языковым стандартом (и какие символы обычно используются), оценки от 1,5x до 2x должно быть достаточно.

Другие вопросы по тегам