zoukankan      html  css  js  c++  java
  • 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}条数据";
    }

     

    分情破爱始乱弃,流落天涯思别离。 如花似玉负情意,影如白昼暗自迷。 随风浮沉千叶落,行色匆匆鬓已稀。
  • 相关阅读:
    配置JDK环境变量
    yum 卸载安装的软件包及依赖
    常用命令--patch
    Git 源码编译安装
    基础Git命令
    下载资源的一些方法
    Python/Jupyter小技巧
    欺诈类Kaggle竞赛赛题描述
    工作小笔记
    进入互联网数据分析岗位需要明白的一些事
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/15465759.html
Copyright © 2011-2022 走看看