2014-10-30 3 views
0

Мне нужно проверить максимальную длину строкового значения, которое будет храниться в столбце VARCHAR2 (4000 байт) в базе данных. Какую максимальную длину я должен взять? Я предположил 2000, потому что Java String закодирована в UTF-16, но я чего-то не хватает? Есть ли случай, когда строка 2000-charactr может принимать более 4000 байтов?Максимальная длина строки для заданного количества байтов

ответ

0

В UTF-16, согласно тому, что я читал онлайн, Java может представлять символы с одним или двумя 16-битными значениями. Лучший способ проверить - использовать примерную строку в том, что вы можете кодировать и распечатать длину, а затем использовать это как ссылку для разработки вашего приложения.

Вот пример кода, вы можете использовать, чтобы проверить это:

String s = "Hello, world!"; 
int byteCountUTF16 = s.getBytes("UTF-16").length; 
+0

«UTF-16», вероятно, нужно будет заменить на Java [имя кодировки] (http://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html# имена), соответствующие набору символов базы данных. – VGR

2

Нет, 2000 символов строки в Java не может иметь более чем 4000 байт данных символов. Иногда вы можете услышать, что UTF-16 является кодировкой с переменной длиной, поскольку для представления кодовой точки Unicode может принимать 2 или 4 байта. Хотя это верно, это не имеет значения, поскольку «символ» Java не является кодовой точкой Unicode, а модулем кода UTF-16, который всегда равен 2 байтам. Следовательно, строка 2000-символа в Java составляет точно 4000 байтов данных UTF-16.

Тангенциальное предупреждение: исходя из вашего использования VARCHAR2, мне кажется, что вы используете базу данных Oracle. Oracle имеет две основные настройки набора символов, набор символов базы данных и национальный набор символов. Первый используется столбцами VARCHAR2 (среди прочих), а другой используется столбцами NVARCHAR2 (опять же, среди прочих). UTF-16 не поддерживается для использования в качестве набора символов базы данных, но для национального набора символов. Я не знаю, как выглядит ваш слой данных, поэтому я не могу сказать, как это повлияет на вас, но вы можете прочитать this Oracle document on character sets для получения дополнительной информации.

Взятый в целом, строка в 2000 символов в Java может оказаться более 4000 байт в другом месте - если где-то по пути, она преобразуется в другую кодировку.