WEB开发网
开发学院数据库MySQL 找到一种不错的从SQLServer转成Mysql数据库的方法... 阅读

找到一种不错的从SQLServer转成Mysql数据库的方法

 2007-10-30 11:02:05 来源:WEB开发网   
核心提示: 2、TEXT字段被截断的问题,上面尝试了3种连接数据库方法,找到一种不错的从SQLServer转成Mysql数据库的方法(2),是因为当初连上MSSQL后SELECT出来的数据总是只有4K长度,以为是连接方式限制导致的,希望对大家有帮助,Update(06/05/05):关于时间戳的转换,

2、TEXT字段被截断的问题。

上面尝试了3种连接数据库方法,是因为当初连上MSSQL后SELECT出来的数据总是只有4K长度,以为是连接方式限制导致的,所以换了几种都是这样,最后查了资料才知道,是php.ini里面这2句配置的问题:

;Validrange0-2147483647.Default=4096.
mssql.textlimit=4096
;Validrange0-2147483647.Default=4096.
mssql.textsize=4096

把4096改成-1(代表无限制)即可,也可以使用mssql_query("SETTEXTSIZE65536");来实现。

3.两种数据库字段类型不同的问题有2个地方需要讲一下,一个是字段支持最大长度要注意,以免插入数据库时候被截断,另外一个就是日期格式的问题了,我比较喜欢用UNIX时间戳。在连MSSQL时候可以用"selectunix_timestamp(created)fromnews"来实现MSSQL里面DATETIME到MYSQL里时间戳的转换。不过迁移时候一次要提取表中所有字段,像上面这种方法就没有简单的"select*fromnews"简洁,需要罗列所有字段。实际可以直接SELECT出来,得到的是一个字符串,比如在MSSQL里面是2006-01-0112:01,取出来的字符串是"2006一月0112:01"(有些奇怪,不知道为什么会产生中文)。用下面这个函数可以转换成时间戳:

functionConvertTime($timestring){
  if($timestring==null){
    return 0;
  }
  $time=explode("",$timestring);
  $year=$time[0];
  switch($time[1]){
    case"一月":$month="1";break;
    case"二月":$month="2";break;
    case"三月":$month="3";break;
    case"四月":$month="4";break;
    case"五月":$month="5";break;
    case"六月":$month="6";break;
    case"七月":$month="7";break;
    case"八月":$month="8";break;
    case"九月":$month="9";break;
    case"十月":$month="10";break;
    case"十一月":$month="11";break;
    case"十二月":$month="12";break;
    default:break;
  }
  $day=$time[2];
  $h=0;
  $m=0;
  $s=0;
  if(!empty($time[3])){
    $time2=explode(":",$time[3]);
    $h=$time2[0];
    $i=$time2[1];
  }
  //returndate("Y-m-dH:i:s",mktime($h,$i,$s,$month,$day,$year));
  returnmktime($h,$i,$s,$month,$day,$year);
}

最后转换脚本写完了可以在CMD窗口里面用php.exeabc.php来执行,这种方式是没有超时时间的,适合迁移大批量数据。

基本上就是这些内容,希望对大家有帮助。 

Update(06/05/05):关于时间戳的转换,在php.ini中加上

mssql.datetimeconvert=Off

后就能得到类似2006-01-0112:01不带有中文的格式了。

上一页  1 2 

Tags:找到 不错 SQLServer

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接