有时候有oracle转mysql的需求, 主要是mysql限制太多了, 除了自增挺好用的, 其它的都还有待加强
可以用powerdesigner转换, 教程自己去网上找, 我就不写了. 但是这工具貌似不会转换函数(我用的16.5版本).
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 字段的时候不能有引号
以上是我在工作中遇到的问题, 可能不是很全, 但是差不多就这些.
官网地址: 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个字符
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。