我想在0-23
表中表示来自postgresql
的数字,并将它们编入索引。
此类数据的最佳数据类型是什么?
postgres=smallint
java=short
或者我可以做得更好吗? postgres中还有一个TINYINT
数据类型,但是我如何在java中表示例如“23”?
答案 0 :(得分:1)
你可以在PostgreSQL中使用"char"
类型(注意双引号,它们很重要),它只占用一个字节并在Java中使用byte
:
CREATE TABLE chartest (
id integer primary key,
c "char");
INSERT INTO chartest (id, c) VALUES (1, 42::"char");
当您查询值时,您必须将表达式强制转换为integer
,以便您可以使用getByte(int)
方法:
java.sql.Statement st = conn.createStatement();
java.sql.ResultSet rs = st.executeQuery("SELECT c::integer FROM chartest WHERE id = 1");
rs.next();
System.out.println(rs.getByte(1));
注意:属性始终根据数据类型的typalign
属性进行对齐。
例如,如果您在上面的示例中的列integer
之后立即添加类型为c
的新列,则会在这些列之间浪费三个字节并将其清空。
因此,如果您想节省空间,必须小心物理布局。
您可以通过这种方式在数据库上节省一些空间,但我不知道是否值得付出努力。如果我是你,我会试验看它是否有所回报。