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

标签 java sql sql-server oracle db2

我正在开发一些必须临时在各种数据库(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,如果是,则对该 View 执行单独的查询以检查大小语义。

关于java - 如何从列元数据中确定列大小是以字节为单位还是以字符为单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1556371/

相关文章:

java - 将 java.util.Properties 与 Hibernate 保持一致?

java - Heroku Java 应用程序在本地崩溃但在网络上没有

sql - 查看PostgresQL中每一行的任何列中是否存在值

sql-server - 从SQL Server进行Sqoop导入,将binary(10)转换为bigint

sql-server - 在 WSL 中配置 SQL Server 时出错

sql-server - 无法在 Powershell 中安装 SQLServer 模块

java - 如果我们真的想强制执行的话,将方法设为 final方法

java - OpenCV Android 在 Imgproc.cvtColor() 上崩溃

sql - 如何有效使用SQL替换功能?

sql - Mysql中的异或约束