MySQL to MS SQL
下載轉表工具
mysql2mssql 把 mysql 表結構轉成 mssql 表結構。
注意:付費版基本可以使用這個工具完成表和數據的轉化。非付費版的可以轉換表結構但是每個表只能導出 50 條數據。
轉換數據
寫一個簡單的轉化腳本 mysql2mssql.php
<?php try { // 你的 mysql 連接信息 $mysqlPDO = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'root', 'root'); } catch (PDOException $e) { exit('mysql 連接失敗' . $e->getMessage()); } try { // 你的 sql server 連接信息 $sqlsrvPDO = new PDO('sqlsrv:Server=localhost;Database=test', 'sa', '123456'); } catch (PDOException $e) { exit('sqlsrv 連接失敗' . $e->getMessage()); } copyData('system_%'); /** * 複製數據 * @param string $tableName 要轉化的表名 * @param bool $debug */ function copyData($tableName, $debug = true) { global $mysqlPDO, $sqlsrvPDO; $mysqlPDO->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); $mysqlPDO->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $tablesState = $mysqlPDO->query("SHOW TABLES LIKE '{$tableName}'"); $tables = $tablesState->fetchAll(PDO::FETCH_COLUMN, 0); $insertCount = $totalCount = 0; $sql = ''; foreach ($tables as $table) { $tableState = $mysqlPDO->query("SELECT * FROM {$table}"); $rows = $tableState->fetchAll(PDO::FETCH_ASSOC); $totalCount += count($rows); $insertOnSql = "SET IDENTITY_INSERT [{$table}] ON"; $sqlsrvPDO->exec($insertOnSql); $debug && $sql .= $insertOnSql . ';' . PHP_EOL; foreach ($rows as $row) { $keys = $values = ''; foreach ($row as $k => $v) { $keys .= "[{$k}],"; switch (gettype($v)) { case 'string': $values .= "'{$v}',"; break; case 'NULL': $values .= "null,"; break; default: $values .= $v . ','; } } $keys = rtrim($keys, ','); $values = rtrim($values, ','); $insertSql = "INSERT INTO [{$table}] ({$keys}) VALUES ({$values})"; $insertCount += $sqlsrvPDO->exec($insertSql); $debug && $sql .= $insertSql . ';' . PHP_EOL; } $insertOffSql = "SET IDENTITY_INSERT [{$table}] OFF"; $sqlsrvPDO->exec($insertOffSql); $debug && $sql .= $insertOffSql . ';' . PHP_EOL; } if ($debug && $sql) { $filename = $tableName . '.sql'; file_exists($filename) && unlink($filename); file_put_contents($filename, $sql, FILE_APPEND); } echo "共{$totalCount}條數據,成功轉換{$insertCount}條數據"; }