前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记分享(5)-ORACLE转MYSQL注意事项

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

原创
作者头像
大大刺猬
修改2021-11-18 11:52:40
1.6K0
修改2021-11-18 11:52:40
举报
文章被收录于专栏:大大刺猬

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

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

oracle转mysql注意事项如下:

代码语言:javascript
复制
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

代码语言:javascript
复制
一个表最多 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个字符

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • oracle转mysql注意事项如下:
  • 如下为mysql的innodb表限制:
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档