需將 SQL Server 資料庫完整遷移至 MySQL。調研後嘗試兩種方案,現對比心得:
ntext、image 等型別無法直接寫入 MySQLINT 存時間戳,匯入時型別衝突結論:僅適合簡單測試環境,生產遷移不推薦。
<?php
$cnx = odbc_connect('web', 'admin', '123456'); // SQL Server DSN
$cur = odbc_exec($cnx, 'SELECT * FROM user');
$conn = mysql_pconnect('localhost', 'root', '123456');
mysql_select_db('mydb', $conn) or die('無法連接 MySQL');
while (odbc_fetch_row($cur)) {
$field1 = odbc_result($cur, 1); // id
$field2 = odbc_result($cur, 2); // name
$field3 = odbc_result($cur, 3); // username
$field4 = odbc_result($cur, 4); // password
$field5 = odbc_result($cur, 5); // recdate (datetime)
$field5 = timetoint($field5); // 轉換為時間戳
$sql = "INSERT INTO user (id,name,username,password,recdate)
VALUES ('$field1','$field2','$field3','$field4','$field5')";
mysql_query($sql, $conn);
}
function timetoint($str) {
list($date, $time) = explode(' ', $str);
list($year, $month, $day) = explode('-', $date);
list($hour, $minute, $second) = explode(':', $time);
return mktime($hour, $minute, $second, $month, $day, $year);
}
?>
<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "web", "admin", "123456"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT ID, name, username, password, recdate FROM user", conn
Set mysql = Server.CreateObject("ADODB.Connection")
mysql.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=mydb;UID=root;PWD=123456;"
Do While Not rs.EOF
recdate = DateDiff("s", "1970-01-01", rs("recdate")) // 轉時間戳
sql = "INSERT INTO user (id,name,username,password,recdate) VALUES (" & _
rs("ID") & ",'" & rs("name") & "','" & rs("username") & "','" & rs("password") & "'," & recdate & ")"
mysql.Execute sql
rs.MoveNext
Loop
%>