mysql to sqlite 数据库转换

论坛: 

想把现有的mysql数据库转换成sqlite,毕竟一般企业数据不是很多,sqlite数据库足够了。

网上查询到:ESF Database Migration Toolkit Pro 和 Navicat for MySQL(MySQL数据库管理工具)  应该是可以的。

导出sql语句,去掉mysql特性,然后倒入sqlite  这个是ken提供的方法,如果工具不行再试试这个。
..............................
如果你想把mysql数据库方便的转换为sqlite数据库,那么你只需要下载Navicat9.0.15
分别新建两个连接,一个mysql一个sqlite(空)
然后直接选中数据表复制粘贴ctrl+c   ctrl+v,即可
Navicat能够自动转换数据
.......................................

 

1、安装sqlite:
sudo apt-get install sqlite sqlite3
sudo apt-get install php5-sqlite
sudo /etc/init.d/apache2 restart
2、导出mysql.sql文件:
3、修改mysql.sql文件使其满足sqlite的格式。
4、将sql文件导入到数据库
sqlite>.read mysql.sql
........................................
用BigDump工具导入超大MySQL数据库备份文件
........................................
SQLiteManager :可以直接导入Mysql 数据
导入Mysql数据表到Sqlite
TeamSNS有18张数据表,手工建立这种事情不是正常人能做到的.于是在网上找转换的脚本.结果只google到一个python的脚本,写得还挺烂.
这时候才感叹phpmyadmin的好用,其实Sqlite也有很多web管理界面,但是太多,所以质量参差不齐.这里强烈推荐SQliteManager,这个东东不但可以在线管理Sqlite,更能将Mysql的sql文件直接导入.实在是居家旅行必备之物.
 
Sqlite的版本
现在Sqlite的主流版本有2和3.彼此之间似乎是不兼容的.PHP5内置支持的SQlite版本是2,而要读写3的库,需要pdo支持.为了空间的兼容性,我选择了2.
 
Sqlite和Mysql的语法差异
标记为Not Null的字段必须非空或指定默认值,否则sql会报错.
update的时候不能Limit 1,真是很奇怪的限制.
没有Unix_Timestamp之类的函数,但是可以直接用PHP写自定义函数.这个很好用,我以Sqlite创始人的名义保证.
 
和Mysql对应的函数
mysql_real_escape_string - sqlite_escape_string
mysql_query - sqlite_query / sqlite_exec
mysql_insert_id - sqlite_last_insert_rowid
mysql_error - sqlite_error_string
mysql_errno - sqlite_last_error
mysql_affected_rows - sqlite_changes
常用的就这么几个,其实用PDO来搞更方便一些.
 
另外说说对Sqlite的感受
从性能上比较意义不大,肯定没有Mysql好.
从功能上讲,对Sql已经支持得不错了,INSER OR 的语法很有新意,自定义函数是亮点,view和trigger暂时还没有尝试过.
另外Sqlite版本的应用可以做到免安装,这个是非常大的优势.
Sqlite版的TeamSNS可以很轻松的跑在各种支持php的嵌入式系统中,比如西部数据的网络硬盘盒,智器的SmartQ.
 

 

    $databases = array (
      'default' => array (
        'default' =>
          array (
            'database' => 'sites/default/files/.ht.sqlite',
            'driver' => 'sqlite',
            'prefix' =>'',
          ),
      ),
      'dest' => array (
        'default' =>
          array (
            'database' => 'db',
              'username' => 'dbu',
              'password' => 'dbp',
              'host' => 'localhost',
              'port' =>'',
              'driver' => 'mysql',
              'prefix' =>'',
            ),
        ),
    );
dashan 答复于