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

 

 

 

posted @ 2021-10-26 14:48  白開水  阅读(598)  评论(0编辑  收藏  举报