SQL Server 轉 MySQL

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}條數據";
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章