有没有办法在首次在表上执行select查询之前获取表元数据?
重述:有没有办法获取数字类型的特定行和数据列的列大小:int,tinyint,bigint等?
DatabaseMetaData md = connection.getMetaData();
ResultSet rs = dbmd.getColumns(null, null, tableName, "%");
我无法使用上述代码,因为数字类型COLUMN_SIZE
(int,tinyint,bigint,etc
)将返回这些类型的最大允许大小。我需要获取columnDisplaySize。
上面的代码将为int(8)
返回10,但我需要8,我可以从表的resultMetaData获取。
有没有办法在不先运行select语句的情况下执行此操作。
由于
答案 0 :(得分:4)
您可能想要检查MySQL中的INFORMATION_SCHEMA表能够为您提供什么。有时您可以利用它们。我做了一些快速查看,没有任何东西立即从那里打击我。
MySQL信息架构:http://dev.mysql.com/doc/refman/5.6/en/information-schema.html
答案 1 :(得分:2)
正如@technocrat所说,请在information_schema上查看此查询
SELECT column_name,column_type FROM INFORMATION_SCHEMA.columns where table_schema ='[Table schema]'和table_name ='[Table Name]'
答案 2 :(得分:1)
答案 3 :(得分:1)
我可能会对你提出的问题不合时宜,但有任何用途的mysql命令show columns in <tablename>
吗? http://dev.mysql.com/doc/refman/5.1/en/show-columns.html了解更多信息。
答案 4 :(得分:1)
对于INT(8)
,您应该知道8不是大小限制。这是MySQL用户经常误解的。类似INT的数据类型的参数只是一个提示,如果SQL的数字少于参数,则填充值。它通常只用于ZEROFILL。
CREATE TABLE foo ( i1 INT(8) ZEROFILL, i2 INT(16) ZEROFILL );
INSERT INTO foo VALUES (1234, 1234);
SELECT * FROM foo;
+----------+------------------+
| i1 | i2 |
+----------+------------------+
| 00001234 | 0000000000001234 |
+----------+------------------+
值8与16不会更改INT所需的存储空间,也不会更改它支持的值范围。 INT数据类型始终为32位,并且始终允许从-2 31 到2 31 -1的值,无论您给出的参数如何。
同样,TINYINT始终为8位,SMALLINT始终为16位,MEDIUMINT始终为24位,BIGINT始终为64位。
您获得的10值是数字精度,而不是大小限制。也就是说,当在base-10中显示时,32位值最多可以使用10位数:
SELECT LENGTH(POW(2,31));
+-------------------+
| LENGTH(POW(2,31)) |
+-------------------+
| 10 |
+-------------------+