我的表在Oracle中称为tb_student
。其ID为NUMBER(9)。我发现使用jdbctemple搜索ID可以由字符串定义。 Java代码运行良好。但是现在我想将数据库从Oracle迁移到PostgreSQL。
迁移后,Java代码错误。因此,我将ID从numeric
更改为varchar
,并且不需要更改表索引。该代码运行良好。但是老板说我不应该更改表,而应该更改Java代码以将id类型更改为Long。
哪种方法更好?我应该更改列的数据类型吗?还是应该更改Java代码?哪个最好?
答案 0 :(得分:3)
很抱歉,您的老板是对的。
数据类型应与实际数据匹配,而不是根据代码中发生的事故选择。
第一个原因是您只能在numeric(9)
列中存储整数值,因此不存在字母蔓延的危险。另外,请考虑会导致值不同的前导零或空格,即使它们在数值上相同。最后,由于字符串的语义不同,您在使用<
或类似查询条件时遇到了麻烦。
答案 1 :(得分:2)
您的列名为ID
,因此从建模的角度来看,它应该是数字,此外它还取决于很多事情,如果此列/表是新的,则可以从数据库级别更改,否则必须确保它不没有使用此列ID
作为数字的外键或过程,甚至在Java代码中也没有将其用作int。这里没有最佳实践,但是从Java代码更改似乎更好。