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}条数据"; }