Access数据安全迁移到SQLite3

  我的小站是ASP+Access建起来的,不过在PHP大兴的今天,有了想改版成PHP的念头。但重要的数据怎么办呢??写程序转吧
  学了四个月的PHP,今天终于开始动工转数据库了。想了一下,感觉SQLite3比较适合,于是就写了一个PHP程序将Access中的数据转换到SQLite3中,不料,Access文章中相当多的东西都无法直接Insert到SQLite3中(因为我在PHP中只看到过Insert这种添加数据的方法),因为文章中可能含有多种符号或者也有未封闭的单引号,这样很有可能会导致SQL语句不能正常执行,导致后面的数据无法添加到SQLite3中。看来用PHP这样的Insert是不行了,那就想办法把数据导出来,然后再导到SQLite3中去,这样的工具可不怎么好找呀,毕竟SQLite3是刚刚流行起来的。
  找呀找呀找工具,找到一个SQLite administrator的,多语言版本的,有简体中文,于是先把分类导进去,还好,分类中的数据没有什么特殊格式。还算顺利。好了,赶快用ASP的addnew把数据导到SQLite3中去吧(前提是你要安装SQLite ODBC)。OK,程序写好了,运行。我倒,全是乱码,于是把页面转换成UTF-8,还是乱码,晕死了,头都大了,无论怎么搞都是乱码,但PHP调出来却是好的。于是又google了一番,说SQLite adminstrator的对中文支持的不好,于是我又找来了,SQLiteSpy 、SQLite Expert 等工具,一打开数据库,倒SQLiteSpy直接就是乱码,而且功能也少得可怜。算了,再看看SQLite Expert吧,打开之后,看了一下它的设置,有UTF-8和ASCIII,OK,好多了,不过在UTF-8模式下,我的SQLite Expert不停的弹出错误对话框,而在ASCII模式下却是正常的数据,怪不得同一个数据库,PHP连接时正常显示,而ASP连接时却出现乱码,看来SQLite admininstrtator导入的中文数据有点问题,还是不用它导入数据了。

     用SQLite Expert开始导入数据“Import/Export" ----> ”Data transfer Wizard" ,OK,一步一步来,直到导入成功为止。  
    数据导入后,再用SQLite Expert打开,在UTF-8模式下,一切正常,在ANSICC模式下,会出现乱码,但不至于不停地弹出错误对话窗,使程序崩溃。
    再来看一下显示页面中会不会出现乱码了,在ANSI模式下,ASP,PHP一切正常,数据至少完整(转换后的SQLite3的体积比Access小了不少,给我省了好多的空间。)。OK,到此为止,初步转换已经完成,下一步就是测试数据。

2009-5-25
用SQLite Expert导入数据后发现,“相关”字段中的内容为乱码,真是郁闷!但其它的内容都正常。看来工具是不可靠的,特别是在处理中文方面,况且SQLite Expert连中文的文件名也不认识。看来只有一个办法:写程序手工导入数据。但在PHP方面,大多都是用Insert来实现,这样的添加方式对于文章系统来说,是一个弊端,因为文章中有相当多的单引号和其它特殊符号,而用Insert的方式去添加数据,极有可能会导致错误出现,但又处于循环中,错误也有可能会不显示,所以这个方案不可靠。数据完整性不能保证。看来只能用Asp那种老套的rs.addnew方式来添加数据了,至少文章内容中的单引号不会出现什么错误问题。想到这里,go,go,go。一会儿的功夫程序就写好了,于是再来看数据,倒,怎么少了8篇文章呢??真是奇怪,程序也没有写错呀,于是,又重新生成了一次数据,晕,还是那样:少了8篇文章,怎么会这样???不行,加个字段,跟踪程序。过了几分钟,数据又重新生成好了,再一看,又正常了,NNDX,什么问题嘛。但又出现了一个奇怪的问题,列表页的数据不会显示,当去掉一个isDel字段后,又正常了,初步判断是这个字段引发的“鸟案”。用SQLite Admin看了一下表结构(用它来看表结构相当的便捷),倒,默认值居然是”“0”“,这表示什么???怪不得我的列表页不显示数据呢。于是不用任何的表设计器,就用官方的sqlite3.exe生成表结构,又重新生成了一下数据,OK,到此为至,数据一切正常,敬请期待“迷茫时代”PHP版的问世!!!!

其实在SQLite3中,可以不用Insert方式来添加数据,至于用什么方法,将在另外一篇文章中介绍。这里不再单独介绍。


2009-7-1
数据按照rs.addnew方法重新整理了一下。感觉好多了。首先是数据库体积上小了很多。而且程序又重新写了一遍,从此不需要的数据也不用再去删除了,直接设定一个标志,当重新添加数据时,新的数据会覆盖这些没有用的数据。目前来说,数据要完整地导入到sqlite3中,还是在asp的环境中进行的。


总结:虽然这次是以asp方式整理好sqlite3数据库的,但要另外安装sqlite odbc驱动,有些不方便。其实用PHP也是可以的,只是初学者很少知道的PDO。后面的添加、修改、删除数据我全部用PDO来处理,因为它太好用了。不要再用老式的变量拼接成的sql,然后直接执行,不安全是第一,过滤不准确也不好,不如原生态的最好。如果你要将access数据完整的迁移到sqlite3请参考:Access数据安全迁移到SQLite3[PHP代码]
300*300
 文章首页关于迷茫时代关于我写意人生
版权所有:迷茫时代 All rights reserved   
执行时间:0.00536 秒