数据从access迁移到mysql的一些问题

freeqiong 2011-01-12 04:28:32
我第一次做迁移,所以使用的方法可能很笨。我是从access把数据导出成txt,然后把txt中的数据粘到一个SQL文件里,导入mysql中,新建成一个临时的表,然后在mysql中进行处理,最后把数据插入到程序使用的正式表中。现在遇到了几个问题:

问题一:

临时表olddocument中有一个字段receiver存储的内容形式是这样的:

|42lhf|lg|tyz|syz|sez|ssz|slz|sjz|sssz|ltez|ng|lbqjys|czqjys|lnqjys|yfqjys|ljxjys|lcxjys|lzxjys|raxjys|rxxjys|sjxjys|ljzx|ljsyzx|ljxsj|lczx|lcsygz|ragz|raez|rszj|rsez|lzzx|lzez|sjzx|sjmg|

就是由用户表user中的用户名组成的字符串,两个用户名间用" | "间隔。

现在我转到正式表document中,并且不再使用用户名了u_name,而是使用用户ID: u_id ,而且使用" , " 间隔,形式如:

1,2,3,7,6,12,13,14,22,38,27,28,29,30,43,44

用户ID:( u_id )与用户名: u_name 都是存在于用户表 user 中,请问这样的情况如转换呢?

问题二:
原库中olddocument表中的时间字段 pub_time 是 “日期/时间” 格式 ,形如:2010-9-9 17:28:22

现在的库document表中使用了时间戳,存储的是int类型,形如:1284024502

我已经查到日期转时间戳可以用如下方法:Select UNIX_TIMESTAMP('2010-9-9 17:28:22')

但是还是不会写SQL语句,现请大家帮忙,谢谢。



涉及到的表结构:

user表:
`u_id` int(11) NOT NULL auto_increment COMMENT '用户ID',
`is_mask` tinyint(1) NOT NULL COMMENT '是否被屏蔽',
`s_num` int(11) NOT NULL COMMENT '顺序号',
`u_name` varchar(20) collate utf8_bin NOT NULL COMMENT '用户登录名',
`cn_name` varchar(40) collate utf8_bin NOT NULL COMMENT '用户中文名',
`u_password` varchar(32) collate utf8_bin NOT NULL COMMENT '用户密码',
`group` int(3) NOT NULL COMMENT '群组',
`u_rights` int(2) NOT NULL COMMENT '用户权限',
`u_remark` varchar(200) collate utf8_bin NOT NULL COMMENT '备注',
`u_logintime` int(10) NOT NULL COMMENT '最后登录时间',
PRIMARY KEY (`u_id`)


document表
`d_id` int(11) NOT NULL auto_increment,
`title` varchar(100) collate utf8_bin NOT NULL COMMENT '公文标题',
`color` varchar(6) collate utf8_bin NOT NULL COMMENT '标题颜色',
`is_top` tinyint(1) NOT NULL COMMENT '置顶',
`doc_snum` varchar(50) collate utf8_bin NOT NULL COMMENT '发文字号',
`pub_time` varchar(32) collate utf8_bin NOT NULL COMMENT '发文时间',
`department` varchar(50) collate utf8_bin NOT NULL COMMENT '发文单位',
`receiver` text collate utf8_bin NOT NULL COMMENT '接收单位',
`content` text collate utf8_bin NOT NULL COMMENT '公文内容',
`doc_type` varchar(30) collate utf8_bin NOT NULL COMMENT '公文类型',
`is_feedback` varchar(50) collate utf8_bin NOT NULL COMMENT '反馈信息',
PRIMARY KEY (`d_id`)






...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeqiong 2011-01-15
  • 打赏
  • 举报
回复
感谢大家的帮忙,最后我采用了四楼给的建议。这么做的确是我最熟悉的方法。
ACMAIN_CHM 2011-01-12
  • 打赏
  • 举报
回复
在EXCEL中把你的数据直接处理好,然后保存成TXT文件,再直接在MYSLQ中LOAD DATA 就行了。
lxq19851204 2011-01-12
  • 打赏
  • 举报
回复
ACCESS转MYSQL不是有工具的嘛.
wwwwb 2011-01-12
  • 打赏
  • 举报
回复
1、拆分字符串 OR 变量累加;
2、字段类型不一致,估计有问题
zuoxingyu 2011-01-12
  • 打赏
  • 举报
回复
类似楼主这样的数据迁移,做一个简单的程序,连接2个数据库,从ACCESS读出来,写入到MYSQL数据库,程序很简单,操作很方便。
小小小小周 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 freeqiong 的回复:]
另外,问题二中,如果我希望更改表本身的pub_time字段呢?就是先把数据从olddocument转到newtable,
然后直接在newtable表中把原来的pub_time数据更新成时间戳,这样的情况该如何写呢?
[/Quote]

这2个时间的类型都不一样,转换可能有问题;有个方法是加一个新字段为int的类型,再把:2010-9-9 17:28:22 转换成int 更新到新的字段
freeqiong 2011-01-12
  • 打赏
  • 举报
回复
回楼上,
用户ID:( u_id )与用户名: u_name 都是存在于用户表 user 中 ,这个后面不是有user表的结构吗?

另外,问题二中,如果我希望更改表本身的pub_time字段呢?就是先把数据从olddocument转到newtable,
然后直接在newtable表中把原来的pub_time数据更新成时间戳,这样的情况该如何写呢?
小小小小周 2011-01-12
  • 打赏
  • 举报
回复
问题一: 不太明白,
用户ID:( u_id )与用户名: u_name 都是存在于用户表 user 中;是怎么样的形式?
问题二:
update newtable,olddocument
set newtable.pub_time=UNIX_TIMESTAMP(olddocument.pub_time)
where ....

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧