如何使用Java从MySQL获取列规范?

如何使用Java从MySQL获取列规范?,java,mysql,sql,Java,Mysql,Sql,在MySQL中,每一列都有二进制、无符号和零填充标志。有没有办法用Java1.8获取这个标志的值?DatabaseMetaData.getColumns()不返回此值,如我所见。假设使用 CREATE TABLE tableA ( id int auto_increment primary key, w INT(8) ZEROFILL NOT NULL, x INT(8) NOT NULL, y int signed not null, z int uns

在MySQL中,每一列都有二进制、无符号和零填充标志。有没有办法用Java1.8获取这个标志的值?DatabaseMetaData.getColumns()不返回此值,如我所见。

假设使用

CREATE TABLE tableA 
(   id int auto_increment primary key,
    w INT(8) ZEROFILL NOT NULL, 
    x INT(8) NOT NULL,
    y int signed not null,
    z int unsigned not null,
    shortBinaryCharString char(10) binary not null,
    myBlob blob(10000) null
);
作为一个起点,主要是借鉴

我建议对
INFORMATION\u SCHEMA
数据库中的表使用标准查询。比如

select table_schema, table_name, column_name, ordinal_position, is_nullable, data_type, 
character_set_name, collation_name, column_type, column_key, extra
from INFORMATION_SCHEMA.columns 
where table_schema = 'so_gibberish' -- your database/schema name
and table_name='tableA'


+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| table_schema | table_name | column_name           | ordinal_position | is_nullable | data_type | character_set_name | collation_name | column_type              | column_key | extra          |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| so_gibberish | tablea     | id                    |                1 | NO          | int       | NULL               | NULL           | int(11)                  | PRI        | auto_increment |
| so_gibberish | tablea     | w                     |                2 | NO          | int       | NULL               | NULL           | int(8) unsigned zerofill |            |                |
| so_gibberish | tablea     | x                     |                3 | NO          | int       | NULL               | NULL           | int(8)                   |            |                |
| so_gibberish | tablea     | y                     |                4 | NO          | int       | NULL               | NULL           | int(11)                  |            |                |
| so_gibberish | tablea     | z                     |                5 | NO          | int       | NULL               | NULL           | int(10) unsigned         |            |                |
| so_gibberish | tablea     | shortBinaryCharString |                6 | NO          | char      | utf8               | utf8_bin       | char(10)                 |            |                |
| so_gibberish | tablea     | myBlob                |                7 | YES         | blob      | NULL               | NULL           | blob                     |            |                |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
你也可能有执行的运气

显示表格中的字段

show create table表a

使用标准java结果集(很可能您已经这样做了)就足够了

try {
      con = DriverManager.getConnection(url, user, password);
      st = con.createStatement();
      rs = st.executeQuery("show fields from tableA");
      while (rs.next()) {
           System.out.println(rs.getString(1)+": "+rs.getString(2));
} catch (SQLException ex) {
     Logger lgr = Logger.getLogger(myTest.class.getName());
     lgr.log(Level.SEVERE, ex.getMessage(), ex);
}


注意:显示字符集和排序规则列的原因是,具有具有特定字符集排序顺序的字符二进制列之间存在细微差别。与真正的二进制blob/text列相比,该列除了二进制之外没有排序顺序。请参阅Mysql手册中标题为“二进制”的页面,并确定如何将其应用到您的“二进制”概念中。通常,必须解析一列输出以确定是否启用了zerofill

CREATE TABLE tableA 
(   id int auto_increment primary key,
    w INT(8) ZEROFILL NOT NULL, 
    x INT(8) NOT NULL,
    y int signed not null,
    z int unsigned not null,
    shortBinaryCharString char(10) binary not null,
    myBlob blob(10000) null
);
作为一个起点,主要是借鉴

我建议对
INFORMATION\u SCHEMA
数据库中的表使用标准查询。比如

select table_schema, table_name, column_name, ordinal_position, is_nullable, data_type, 
character_set_name, collation_name, column_type, column_key, extra
from INFORMATION_SCHEMA.columns 
where table_schema = 'so_gibberish' -- your database/schema name
and table_name='tableA'


+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| table_schema | table_name | column_name           | ordinal_position | is_nullable | data_type | character_set_name | collation_name | column_type              | column_key | extra          |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
| so_gibberish | tablea     | id                    |                1 | NO          | int       | NULL               | NULL           | int(11)                  | PRI        | auto_increment |
| so_gibberish | tablea     | w                     |                2 | NO          | int       | NULL               | NULL           | int(8) unsigned zerofill |            |                |
| so_gibberish | tablea     | x                     |                3 | NO          | int       | NULL               | NULL           | int(8)                   |            |                |
| so_gibberish | tablea     | y                     |                4 | NO          | int       | NULL               | NULL           | int(11)                  |            |                |
| so_gibberish | tablea     | z                     |                5 | NO          | int       | NULL               | NULL           | int(10) unsigned         |            |                |
| so_gibberish | tablea     | shortBinaryCharString |                6 | NO          | char      | utf8               | utf8_bin       | char(10)                 |            |                |
| so_gibberish | tablea     | myBlob                |                7 | YES         | blob      | NULL               | NULL           | blob                     |            |                |
+--------------+------------+-----------------------+------------------+-------------+-----------+--------------------+----------------+--------------------------+------------+----------------+
你也可能有执行的运气

显示表格中的字段

show create table表a

使用标准java结果集(很可能您已经这样做了)就足够了

try {
      con = DriverManager.getConnection(url, user, password);
      st = con.createStatement();
      rs = st.executeQuery("show fields from tableA");
      while (rs.next()) {
           System.out.println(rs.getString(1)+": "+rs.getString(2));
} catch (SQLException ex) {
     Logger lgr = Logger.getLogger(myTest.class.getName());
     lgr.log(Level.SEVERE, ex.getMessage(), ex);
}

注意:显示字符集和排序规则列的原因是,具有具有特定字符集排序顺序的字符二进制列之间存在细微差别。与真正的二进制blob/text列相比,该列除了二进制之外没有排序顺序。请参阅Mysql手册中标题为“二进制”的页面,并确定如何将其应用到您的“二进制”概念中。通常,必须解析一列输出以确定是否启用了zerofill