java – 如何确定列大小是以字节为单位还是列元数据中的字符?

我正在研究一些必须暂时在各种数据库(Oracle,DB2,SQLServer)中创建虚拟条目的软件.该行中的每一列都填充有随机数据.

该代码使用java中的java.sql.DataBaseMetaData类来获取COLUMN_SIZE属性,以确定在VARCHAR2和其他字符串列类型中存储的随机字符串的大小.

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

问题是,至少在Oracle中,我似乎无法弄清楚是否以字节或字符返回列长度.此外,根据编码,字符是不同的字节数.结合所有这些,我得到一些SQL错误,因为试图插入的字符串太大.我错过了一些明显的东西吗

解决方法:

我没有看到通过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,如果是,则针对此视图执行单独查询以检查大小语义.

上一篇:DB2 v9.1 RACF 瞎学笔记


下一篇:mysql – 使用带有UTF8的VARCHAR的SQL表(关于多字节字符长度)