Details
-
Type:
Bug
-
Status: Closed
-
Priority:
Trivial
-
Resolution: Won't Fix
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: None
-
Labels:
Description
The metadata returned by this.conn.getMetaData() appears to have hard-coded values for COLUMN_SIZE when it comes to temporal fields. For TIMESTAMP for example, 19 is always returned regardless of how many precision digits there are.
This happens regardless of whether the "useInformationSchema" property is set on the connection.
junit test case:
public void testTableMetadata() throws SQLException {
createTable("ms_metadata", "(ts0 TIMESTAMP(0), ts3 TIMESTAMP(3))");
DatabaseMetaData metaData = this.conn.getMetaData();
this.rs = metaData.getColumns(null, null, "ms_metadata", null);
this.rs.next();
assertEquals(java.sql.Types.TIMESTAMP, this.rs.getInt("DATA_TYPE"));
assertEquals("TIMESTAMP", this.rs.getString("TYPE_NAME"));
assertEquals(19, this.rs.getInt("COLUMN_SIZE"));
this.rs.next();
assertEquals(java.sql.Types.TIMESTAMP, this.rs.getInt("DATA_TYPE"));
assertEquals("TIMESTAMP", this.rs.getString("TYPE_NAME"));
assertEquals(23, this.rs.getInt("COLUMN_SIZE"));
}
The last assert will fail. Same applies to DATETIME and TIME types.
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
Re: Connector/J does not return sub-second precision of fields when retrieving database metadata
These values are hard-coded in the Connector/J, the sever cannot influence them.
http://bazaar.launchpad.net/~mark-mysql/connectorj/5.1/view/1053/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java#L1190