数码资讯
发现把从SQLServer数据库的好方法
在今年年初一直在做迁移网站MSSQL2000 -> mysql5,因为程序系统的使用是不同的,所以在数据迁移的主要问题。2系统数据库的结构差异很大,不易以MySQL为ODBC SQL数据源服务器的功能(不推荐做因此,在不同的点的字段的类型会搞死了,所以~)在Windows下编写一个PHP脚本从SQL
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在今年年初一直在做迁移网站MSSQL2000 -> mysql5,因为程序系统的使用是不同的,所以在数据迁移的主要问题。2系统数据库的结构差异很大,不易以MySQL为ODBC SQL数据源服务器的功能(不推荐做因此,在不同的点的字段的类型会搞死了,所以~)在Windows下编写一个PHP脚本从SQLServer中读取数据,然后按照需要应对新的插入MySQL里面,弹性也比较方便。在实际过程中存在的主要问题如下:
1,数据库的连接主要是连接到SQL服务器,主要有3种方法:
1.1, using the mssql_ series functions in PHP, this is similar to using mysql_ series functions, but we need to expand the correlation expansion (extension=php_mssql.dll) in php.ini.
1.2使用ODBC连接,抽象的具体数据库,所以没有办法使用数据表字段名称的特性=数组键,鉴于具体的应用程序不是很方便,代码形式:
$ conn = odbc_connect(数据源
从新闻中选择*;
电流= odbc_exec美元(美元美元Conn,SQL);
而(odbc_fetch_row($ CUR)){
合田= odbc_result(合狗,1);
2美元= odbc_result(合狗,2);
做某事
}
1.3使用PDO的PHP5的数据对象层,作为数据访问接口的正式启动,具有许多优点,如支持参数绑定防止SQL注入;司机可以为不同的数据库加载不同的程序代码是一致的、易于移植等,相信应该是大势所趋然而,由于新的面向对象特征的PHP5,它需要PHP5支持,5.1可以直接使用,5需要安装的PECL,和修改的PHP.ini,加入:推广= php_pdo_mysql.dll推广= php_pdo_mssql.dll,实际的代码如下:
{试
$胸径=新PDO(MSSQL:北京XXX;主机为localhost
根
赶上(PDOException,e){ }
打印错误!。$ E -> GetMessage(); / /错误信息
(死亡);
}
美元美元支撑=胸径->准备(SELECT * FROM新闻 / /支架);手柄支撑美元
如果(美元支撑->执行()){
而($行=美元支撑->取()){
做某事
}
}
$ stmt2 = MSSQL ->美元准备(插入新闻
(标题,作者)值(标题,作者);
$ stmt2 -> bindparam(标题,标题:美元);
$ stmt2 -> bindparam(':作者,为作者);
$ stmt2 ->执行();
$胸径= null; / /关闭连接这里提醒MSSQL有限制在没有MySQL语法。
2,文本字段被截断。
它试图连接数据库的3种方法,第一是因为即使MSSQL数据总是选择4K的长度,思想是连接的限制,所以一些都是这样的,最后检查php.ini里面2句的配置问题:
有效范围0 - 2147483647。默认值= 4096。
mssql.textlimit = 4096
有效范围0 - 2147483647。默认值= 4096。
mssql.textsize = 4096
这是有可能改变4096到1(代表不受限制的),或mssql_query(设置文字大小65536);实施。
3、两种数据库字段,不同类型的问题,有2个地方要讨论,一个是字段支持,最大的长度应该注意,以免在插入数据库时被截断,另一个是日期格式问题。我更喜欢使用Unix时间戳,甚至MSSQL,选择unix_timestamp(创建)从新闻可以用来变换时间日期在MSSQL MySQL的邮票。然而,当迁移提取表中,所有的领域,没有简单的选择从新闻事实上,它可以直接出来的选择,得到一个字符串,例如,在MSSQL,这是2006-01-01 12:01,字符串2006, 01时间。这个功能可以被转换成一个具有以下功能的时间戳:
功能converttime($ TimeString){
如果(TimeString = =零美元){
返回0;
}
时间=爆炸(
$ = $时间{ 0 };
开关(时间{ 1 }){
案例一个月:$ =1;打破;
案例二月:$ =2;
案件三月:$ =3 ;打破;
案例四月:$ =4;
案例:$ =5 ;中断;
案例六月:$ =6;
案例七月:$ =7;
案件八月:$月8;打破;
案例九月:$ =9;
案例十月:$ =10;
案例十一月:$ =11;
案例十二月:$ =12;
默认值:中断;
}
$天=时间{ 2 };
$=0;
$ = 0;
$=0;
如果(!空($时间{ 3 }){
2美元=爆炸(:
$ H = $ 2 { 0 };
我= $ 2 { 1 };
}
/ /归还日期(当前H:我:S
返回mktime($ H,我的美元,美元,美元,美元,美元一天,月,年);
}最后,转换脚本完成后,可以在cmd窗口执行abc.php php.exe。此方法不超时,适合迁移批量数据。
这基本上是内容,希望对你有帮助。
更新(06 / 05 / 05):在时间戳转换添加到php.ini
mssql.datetimeconvert =关闭
在那之后,你可以得到一个类似的格式2006-01-01中午没有中国。
1,数据库的连接主要是连接到SQL服务器,主要有3种方法:
1.1, using the mssql_ series functions in PHP, this is similar to using mysql_ series functions, but we need to expand the correlation expansion (extension=php_mssql.dll) in php.ini.
1.2使用ODBC连接,抽象的具体数据库,所以没有办法使用数据表字段名称的特性=数组键,鉴于具体的应用程序不是很方便,代码形式:
$ conn = odbc_connect(数据源
从新闻中选择*;
电流= odbc_exec美元(美元美元Conn,SQL);
而(odbc_fetch_row($ CUR)){
合田= odbc_result(合狗,1);
2美元= odbc_result(合狗,2);
做某事
}
1.3使用PDO的PHP5的数据对象层,作为数据访问接口的正式启动,具有许多优点,如支持参数绑定防止SQL注入;司机可以为不同的数据库加载不同的程序代码是一致的、易于移植等,相信应该是大势所趋然而,由于新的面向对象特征的PHP5,它需要PHP5支持,5.1可以直接使用,5需要安装的PECL,和修改的PHP.ini,加入:推广= php_pdo_mysql.dll推广= php_pdo_mssql.dll,实际的代码如下:
{试
$胸径=新PDO(MSSQL:北京XXX;主机为localhost
根
赶上(PDOException,e){ }
打印错误!。$ E -> GetMessage(); / /错误信息
(死亡);
}
美元美元支撑=胸径->准备(SELECT * FROM新闻 / /支架);手柄支撑美元
如果(美元支撑->执行()){
而($行=美元支撑->取()){
做某事
}
}
$ stmt2 = MSSQL ->美元准备(插入新闻
(标题,作者)值(标题,作者);
$ stmt2 -> bindparam(标题,标题:美元);
$ stmt2 -> bindparam(':作者,为作者);
$ stmt2 ->执行();
$胸径= null; / /关闭连接这里提醒MSSQL有限制在没有MySQL语法。
2,文本字段被截断。
它试图连接数据库的3种方法,第一是因为即使MSSQL数据总是选择4K的长度,思想是连接的限制,所以一些都是这样的,最后检查php.ini里面2句的配置问题:
有效范围0 - 2147483647。默认值= 4096。
mssql.textlimit = 4096
有效范围0 - 2147483647。默认值= 4096。
mssql.textsize = 4096
这是有可能改变4096到1(代表不受限制的),或mssql_query(设置文字大小65536);实施。
3、两种数据库字段,不同类型的问题,有2个地方要讨论,一个是字段支持,最大的长度应该注意,以免在插入数据库时被截断,另一个是日期格式问题。我更喜欢使用Unix时间戳,甚至MSSQL,选择unix_timestamp(创建)从新闻可以用来变换时间日期在MSSQL MySQL的邮票。然而,当迁移提取表中,所有的领域,没有简单的选择从新闻事实上,它可以直接出来的选择,得到一个字符串,例如,在MSSQL,这是2006-01-01 12:01,字符串2006, 01时间。这个功能可以被转换成一个具有以下功能的时间戳:
功能converttime($ TimeString){
如果(TimeString = =零美元){
返回0;
}
时间=爆炸(
$ = $时间{ 0 };
开关(时间{ 1 }){
案例一个月:$ =1;打破;
案例二月:$ =2;
案件三月:$ =3 ;打破;
案例四月:$ =4;
案例:$ =5 ;中断;
案例六月:$ =6;
案例七月:$ =7;
案件八月:$月8;打破;
案例九月:$ =9;
案例十月:$ =10;
案例十一月:$ =11;
案例十二月:$ =12;
默认值:中断;
}
$天=时间{ 2 };
$=0;
$ = 0;
$=0;
如果(!空($时间{ 3 }){
2美元=爆炸(:
$ H = $ 2 { 0 };
我= $ 2 { 1 };
}
/ /归还日期(当前H:我:S
返回mktime($ H,我的美元,美元,美元,美元,美元一天,月,年);
}最后,转换脚本完成后,可以在cmd窗口执行abc.php php.exe。此方法不超时,适合迁移批量数据。
这基本上是内容,希望对你有帮助。
更新(06 / 05 / 05):在时间戳转换添加到php.ini
mssql.datetimeconvert =关闭
在那之后,你可以得到一个类似的格式2006-01-01中午没有中国。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。