1.CHAR型更改为VARCHAR型
踩坑:数据库中直接执行sql能查询到数据,但是通过程序无法查询到。
原因:查询条件中有字段为CHAR型,比如CHAR(10),但是我输入的条件不足10位,就会自动补全
所以把这个CHAR(10)更改为VARCHAR(10)
相关博客
https://www.cnblogs.com/acme6/p/9549902.html
2.trim()
上一个问题 我本来的解决方式是使用trim
比如原来的sql是
select * from table_name where column=#{column}
我改成了
select * from table_name where trim(column)=#{column}
这样是能查询出来,本以为问题解决,但是领导提醒我,trim()不走索引
我查了一下,说是trim()会全表扫描
所以才把字段类型char改为varchar
但是迁移数据时候需要注意:我是从达梦往oracle迁移,由于达梦中数据类型还是char,所以我需要在迁移之后,对oracle中的数据进行trim
UPDATE TABLE_NAME SET COLUMN=TRIM(COLUMN);
3.VACHAR类型长度加长
遇到迁移数据时,含有中文的字段报长度不够的问题
我们dba告诉我现在达梦是按照字符存储,ORACLE是按照字节存储,编码是UTF-8
根据UTF-8编码下,一个汉字占用3个字节,所以我把中文字段都加大到长度乘以三
可参考
https://blog.csdn.net/bobozai86/article/details/106888614
4.过长的Varchar改为clob
超过VARCHAR(4000)的,字段类型都改为CLOB
因为oracle的varchar最长也就4000
5.避免对clob进行distinct
oracle 10+g不支持对类型为CLOB的列进行distinct
6.建表时,表和字段全大写
不大写,查询时候就需要加双引号,否则就会报表和视图不存在错误
如果全大写,查询的时候使用的sql,大小写就无所谓了
有一个比较快的方法,就是使用notepad++,选中建表sql,直接改为全大写
7.*要具体
多表关联时,或者结果集中需要查询其他字段时,*要具体指出这是哪张表的*
不具体,直接*时
改为这是哪张表的*后
或者,你直接把列名都复制出来,把*去掉,也行
8.涉及到排序的字段需要是数字,而不能是字符串
看箭头指向的地方,之前我写的是'0',就会报错:期望是int但是得到了string
改为数字0后,达梦和oracle执行都通过
9.在Oracle里,表的别名不能用as,列的别名可以用as
https://blog.csdn.net/qichangjian/article/details/91381808
我的解决方式直接把表的as去掉
10.DM管理工具的使用
由于一直使用navicat,习惯了点击运行就直接提交。
但是达梦不是啊,运行是运行,提交是提交,除非selet类型的sql,直接点击运行就把数据给你查出来了
如果你有删除更新等操作,点击运行之后再点击提交才会对数据进行操作
或者直接在sql后边加上commit