好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 clemmenson 于 2025-3-21 09:57 编辑
之前处理老PHP项目时候写了一个SQLite和MySQL互转工具,支持简单的语句转换,具体功能:
1. 语法转换
通过一系列正则表达式,移除或替换MySQL特有的语法,使其兼容SQLite:
​移除反引号:
str_replace('', '', $createTableSql)`
MySQL使用反引号包裹表名和字段名,SQLite不支持,直接移除。
​移除AUTO_INCREMENT:
preg_replace('/\bAUTO_INCREMENT\b/i', '', $createTableSql)
SQLite不支持AUTO_INCREMENT,直接移除。
int替换为INTEGER:
preg_replace('/\bint$\d+$\b/i', 'INTEGER', $createTableSql)
varchar替换为TEXT:
preg_replace('/\bvarchar$\d+$\b/i', 'TEXT', $createTableSql)
text和timestamp替换为TEXT:
preg_replace('/\btext\b/i', 'TEXT', $createTableSql)
preg_replace('/\btimestamp\b/i', 'TEXT', $createTableSql)
ENUM替换为TEXT:
preg_replace('/\bENUM$[^)]+$/i', 'TEXT', $createTableSql)
SQLite支持的数据类型较少,需将MySQL的复杂类型转换为SQLite支持的类型。
​移除MySQL特有属性:
DEFAULT CURRENT_TIMESTAMP:
preg_replace('/\bDEFAULT CURRENT_TIMESTAMP\b/i', '', $createTableSql)
ENGINE、DEFAULT CHARSET、COLLATE:
preg_replace('/\bENGINE=\w+\s*/i', '', $createTableSql)
preg_replace('/\bDEFAULT CHARSET=\w+\s*/i', '', $createTableSql)
preg_replace('/\bCOLLATE=\w+\s*/i', '', $createTableSql)
移除单独的PRIMARY KEY定义:
preg_replace('/,\s*PRIMARY KEY\s*$[^)]+$/i', '', $createTableSql)
移除KEY定义:
preg_replace('/,\s*KEY\s+\w+\s*$[^)]+$/i', '', $createTableSql)
移除外键约束:
preg_replace('/,\s*CONSTRAINT\s+\w+\s+FOREIGN KEY\s*$[^)]+$\s+REFERENCES\s+\w+\s*$[^)]+$/i', '', $createTableSql)
​2. 主键处理
如果字段是主键且是整数类型,则添加AUTOINCREMENT属性:
​匹配主键字段:
preg_match('/PRIMARY KEY\s*$([^)]+)$/i', $createTableSql, $matches)
​添加AUTOINCREMENT:
preg_replace('/\b' . $primaryKey . '\s+INTEGER/i', $primaryKey . ' INTEGER PRIMARY KEY AUTOINCREMENT', $createTableSql)
使用方法:直接上传到服务器,访问index.php,输入相关信息开始转换。
sqlite_to_mysql.zip
(42.91 KB, 下载次数: 94)
|
免费评分
-
查看全部评分
|