由于在后台项目建表时考虑不周全,导致列的类型选择错误,现需要修改列的类型。

一.varchar2改为clob

java如何将clob转为json clob转为varchar2的方法_clob

MYSQL修改列名写法:ALTER TABLE `表名` CHANGE COLUMN `旧列名` `新列名` DATETIME NULL DEFAULT NULL COMMENT '修改时间' ;

二.oracle中Blob和Clob类型的区别

1.BLOB   
 BLOB全称为二进制大型对象(Binary   Large   Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节   
2.CLOB   
 CLOB全称为字符大型对象(Character   Large   Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节

     通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。

JAVA里面对CLOB的操作

  在绝大多数情况下,使用2种方法使用CLOB

  1 相对比较小的,可以用String进行直接操作,把CLOB看成字符串类型即可

  2 如果比较大,可以用 getAsciiStream 或者 getUnicodeStream 以及对应的 setAsciiStream 和 setUnicodeStream 即可

三.CLOB字段和varchar

如果能控制在4000个字符以内的,尽量还是用varchar2(4000 CHAR)吧 如果超过了,也只好用clob了。处理起来其实也还好,基本是在程序里面当作varchar来处理即可

超过就只能用CLOB,12C里面有32K的VARCHAR2,但是实现起来还是CLOB。 如果在CLOB里面存短文本,ORACLE还是会像VARCHAR2一样处理,不会和其他字段分开存储。

四.str绑定值的结尾null字符缺失

首先将数据长度确定出来。注意:中文占用字节长度的问题;根据字符集编码的不同,在oracle里有可能占2或者3个字节。其次查看定义的字段长度,我的字段长度为vachar2(4000),貌似varchar2最长就是4000,好奇的可以去查查这方面的问题。

1.报表中sql定义的最大长度是4000,在sql中如果字节个数大于4000的话, 
一个字符占两个字节,也就是 汉字*2+字母数 不能大于2000 
2.在复制excel粘贴到数据库中得时候也出现报错,原因是有一个单元格中有半个双引号,反映到数据库中识别就有问题了。 
解决办法:去掉半个双引号。
3.我的字段小于4000,没发现多余的引号,回车也去掉了也不行,后来,把excel中很长文本的那一列的格式修改成“文本”,再拷贝到
数据库中,提交就不报错了
终极解决方案:修改列的类型,vachar改成clob

五.复制表格数据

5.1只是复制表结构

java如何将clob转为json clob转为varchar2的方法_java如何将clob转为json_02

当where1=2恒等于false,所以这条语句不能查出任何数据,只能有表结构。所以实现了只复制表结构不复制表数据功能

5.2复制表数据和表结构

java如何将clob转为json clob转为varchar2的方法_clob_03

ps:

java如何将clob转为json clob转为varchar2的方法_修改列类型_04