黑马程序员技术交流社区

标题: 【广州校区】+【原创】+ oracle数据库存储字段过长怎么解决 [打印本页]

作者: ley    时间: 2018-12-6 21:59
标题: 【广州校区】+【原创】+ oracle数据库存储字段过长怎么解决
工作中经常遇到存储大数据类型的字段。怎么确保存储成功,并不报错。
在Oracle Database中,VARCHAR2字段类型,最大值为4000,SQL参考手册中也明确指出VARCHAR2的最大大小为4000,注意此处的最大长度是指字节长度,而不是指字符个数。这个跟参数NLS_LENGTH_SEMANTICS有一定关系,如下所示,当参数NLS_LENGTH_SEMANTICS为字节时,定义的变量长度为字节长度
一不注意就收到bug库的通知消息。当存储长度超过4000就报ORA-00910
                              
解决办法是什么呢,使用大文本字段,使用复杂,可读性差。一般不建议。我们可以同设计数据库表来解决这个问题。
@Table(name="tb_specification")
public class Specification implements Serializable
   
   /** 主键  规格编号*/
   
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   @Column(name="id")
   private Longid;
   /** 规格名称 */
   
@Column(name="spec_name")
    private StringspecName;
    /** 规格属性集合 */
   
@Transient
    private List<SpecificationOption>specificationOptions;
   
@Table(name="tb_specification_option")
public class SpecificationOption implements Serializable
   
   /** 编号 主键 */
   
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   @Column(name="id")
   private Longid;
   /** 规格选项名称 */
   
@Column(name="option_json")
    private StringoptionJson;
    /** 规格id */
   
@Column(name="spec_id")
    private LongspecId;
    /** 排序 */
   
@Column(name="orders")
    private Integerorders;
  
规格表
  
  
规格选项表
  
  
规格ID
  
  
规格名称
  
  
主键ID
  
  
规格外键ID
  
  
大数据文本类型
  
  
排序
  
  
1
  
  
内存
  
  
1
  
  
1
  
  
{["xxxx1":xxxxx],["xxxx2",xxxx],
  
  
1
  
  
2
  
  
1
  
  
["xxxx3":xxxx],["xxxx4":xxxx],
  
  
2
  
  
3
  
  
1
  
  
["xxxx3":xxxx],["xxxx4":xxxx]}
  
  
3
  
代码中使用两个类,做数据封装根据spec_id找到对应的option_json再根据orders做一个排序。那再长的数据量都不担心啦。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2