Как выяснить, указан ли размер столбца в байтах или символах из метаданных столбца? - PullRequest
4 голосов
/ 12 октября 2009

Я работаю над некоторым программным обеспечением, которое должно временно создавать фиктивные записи в различных базах данных (Oracle, DB2, SQLServer). Каждый столбец в строке заполнен случайными данными.

Код использует класс java.sql.DataBaseMetaData в java, чтобы получить атрибут COLUMN_SIZE, чтобы выяснить, какой большой размер случайной строки хранить в VARCHAR2 и других типах столбцов строки.

DatabaseMetaData metadata = connection.getMetaData();
while (resultSet.next()) {
  ResultSet resultSet = metadata.getColumns(...);
  int size = resultSet.getInt("COLUMN_SIZE");
}

Проблема, по крайней мере, в Oracle, я не могу понять, возвращается ли длина столбца в байтах или символах. Также, в зависимости от кодировки, символы имеют различное количество байтов. Объедините все это, и я получаю некоторые ошибки SQL, потому что строки, которые пытаются вставить, слишком велики. Я что-то упускаю из виду?

1 Ответ

4 голосов
/ 12 октября 2009

Я не вижу способа определить это с помощью метаданных JDBC. Есть еще один столбец с именем CHAR_OCTET_LENGTH, но в моем эксперименте он не помогал различать семантику байтов и символов.

Чтобы выяснить это в словаре данных Oracle, нужно посмотреть на ALL_TAB_COLUMNS.CHAR_USED:

    CHAR_USED   VARCHAR2(1)     
        B | C.
        B indicates that the column uses BYTE length semantics.
        C indicates that the column uses CHAR length semantics.
        NULL indicates the datatype is not any of the following:

        * CHAR
        * VARCHAR2
        * NCHAR
        * NVARCHAR2

Таким образом, вы можете проверить, подключены ли вы к Oracle, и, если это так, выполнить отдельный запрос к этому представлению, чтобы проверить семантику размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...