笔记分享(5)-ORACLE转MYSQL注意事项

有时候有oracle转MysqL的需求, 主要是MysqL限制太多了, 除了自增挺好用的, 其它的都还有待加强

可以用powerdesigner转换, 教程自己去网上找, 我就不写了. 但是这工具貌似不会转换函数(我用的16.5版本).

oracle转MysqL注意事项如下:

1. 需要注意字符集
2. # 在oracle里面正常, 但是在MysqL里面需要加 ` ` 比如: `line#`
3. sys_guid()函数 改为 uuid()  函数
4.  MysqL认值不支持函数, 要使用此功能的话 可以用触发器来实现
5. default 'SYSDATE'  不支持.  可以用DEFAULT CURRENT_TIMESTAMP来代替
6. 索引字段长度问题 Specified key was too long; max key length is 3072 bytes
7. MysqL认的sql_mode设置了事件不能为空的问题, 需要去掉NO_ZERO_IN_DATE  NO_ZERO_DATE 
   ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,,,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
8. MysqL行最大为65535.
9. 保留字段加反引号 `  比如  `KEY`
10 . 时间函数转换(可能存在于视图,存储过程等)
   to_date 改为 str_to_date
11. to_char改为concat(123 as char)   to_char 也可以改为date_format
12. number --> decimal
13.  oracle的substr是从0开始算,  MysqL是从1开始算, 所以转为MysqL的时候要+1
    例子: select substr('abcd',0,3) from dual;
		  select substr('abcd',1,3);
	但是其它情况不需要+1, 比如从第几位开始取, 都是从1开始算的
		select substr('abcd',3) from dual;
		select substr('abcd',3);

14. REGEXP_SUBSTR函数在8.0.4之后才支持
15 时间转换为字符
	select date_format('2021-08-03','%Y-%m-%d');   --oracle中的to_char();
16. 字符转为时间
	select str_to_date('2021-08-03','%Y-%m-%d');   --oracle中的to_date();

17 text/blob不能有认值  BLOB, TEXT, GEOMETRY or JSON column 'SEQ' can't have a default value


18 wm_concat 替换为 group_concat

19 select 字段的时候不能有引号

以上是我在工作中遇到的问题, 可能不是很全, 但是差不多就这些.

如下为MysqL的innodb表限制:

官网地址: https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html

一个表最多 1017 个字段(5.6.9及其之前是1000限制)
注意: 虽然MysqL的限制是4096, 但是innodb的限制小得多, myisam才能达到那么多

一个字段最多 21845-1 字符(已经很大了, 一般不用管)
这个是按 每个字符 3字节算的, 65535 / 3 = 21845

最多 64 个索引


以下数据为 innodb_page_size=16384 时的情况


最大行字段为65535字节(也就是4页)
注意: text和blob只算9-12字节(仅包含位置)

innodb_large_prefix 启用时(认):  索引键前缀现在为 3072 字节 ( DYNAMIC 或 COMpressed )
innodb_large_prefix 关闭时:        任何行格式的表的索引键前缀限制为 767 字节
对于InnoDB使用REDUNDANT 或 COMPACT 行格式的表, 索引键前缀长度限制为 767 字节 
innodb行格式查看:  show variables like '%innodb_default_row_format%';

每个索引最多 16 个字段  , 多了会报错  ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed


最大行 为 8000 字节(半页) , 超过半页 会用外部页存储
LONGBLOB和 LONGTEXT 列必须小于 4GB,并且总行大小(包括BLOB和 TEXT列)必须小于 4GB


innodb日志文件最大为 512GB

最小表空间 10M (oracle是1M)

最大表空间为 64T (innodb_page_size * 2^32 = 16384 * 2^32= 2^26=64T)   
注意操作系统的限制:  ext4文件系统最大支持16T



总结:
每行最大 65535 字节,  1017个字段, 每个字段21845字符
索引前缀限制为767字节 (innodb_large_prefix开启时, DYNAMIC 或 COMpressed限制为 3072字节)
主键最长1000字节, 也就是333个字符

相关文章

MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导...
在MySQL中,InnoDB引擎通过Next-Key Locking技术来解决幻读问...
在数据库事务管理中,Undo Log 和 Redo Log 是两种关键日志,...
case when概述 sql语句中的case语句与高级语言中的switch语句...
其实很简单,只是为了忘记,做个记录,用的时候方便。 不管是...
1.进入服务,找到mysql服务,在属性里找到mysql的安装路径 2...