在写ArkPlus框架过程中一直使用的基于PDO驱动的MySQL,因为项目需求,要转一个SQLite版本,于是写了这个简单的转换函数,实现MySQL建表语句到SQLite的平滑转换,有需要的童鞋们可以拿去。
/**
* mysql(ctreate_table)转sqlite语句
* @author anrip[mail@anrip.com]
* @version 2.1, 2013-01-18 17:02
* @link http://www.anrip.com/?arkplus
*/
function ark_table_mysql2sqlite($sql) {
$expr = array(
'/`(\w+)`\s/' => '[$1] ',
'/\s+UNSIGNED/i' => '',
'/\s+[A-Z]*INT(\([0-9]+\))/i' => ' INTEGER$1',
'/\s+INTEGER\(\d+\)(.+AUTO_INCREMENT)/i' => ' INTEGER$1',
'/\s+AUTO_INCREMENT(?!=)/i' => ' PRIMARY KEY AUTOINCREMENT',
'/\s+ENUM\([^)]+\)/i' => ' VARCHAR(255)',
'/\s+ON\s+UPDATE\s+[^,]*/i' => ' ',
'/\s+COMMENT\s+(["\']).+\1/iU' => ' ',
'/[\r\n]+\s+PRIMARY\s+KEY\s+[^\r\n]+/i' => '',
'/[\r\n]+\s+UNIQUE\s+KEY\s+[^\r\n]+/i' => '',
'/[\r\n]+\s+KEY\s+[^\r\n]+/i' => '',
'/,([\s\r\n])+\)/i' => '$1)',
'/\s+ENGINE\s*=\s*\w+/i' => ' ',
'/\s+CHARSET\s*=\s*\w+/i' => ' ',
'/\s+AUTO_INCREMENT\s*=\s*\d+/i' => ' ',
'/\s+DEFAULT\s+;/i' => ';',
'/\)([\s\r\n])+;/i' => ');',
);
$sql = preg_replace(array_keys($expr), array_values($expr), $sql);
return $sql === null ? '{table_mysql2sqlite_error}' : $sql;
}