最近我继承了一个在 MSSQL 中构建的项目,需要转换为 MySQL。对于任何研究过这个的人,你会很快意识到这不是一个简单的转换。您可以尝试一些工具,也可以尝试手动方式。

## 先手动方式:

这涉及编写一个从 MSSQL 数据库读取并写入 MySQL 数据库的脚本,所有这些脚本都在同一个文件夹中:

对于我修改了 PDO Wrapper 的数据库调用,可以在 https://github.com/dcblogdev/pdo-wrapper/blob/mssql/src/Database.php 访问此版本

然后我将 db.php 包含到 config.php 文件中。为我称为“$old”的 MSSQL 和我称为 $new 的 MySQL 数据库设置凭据

<?php
require 'db.php';

$old_username = 'username';
$old_password = 'password';
$old_database = 'databasse';
$old_host = 'ip address';
$old_type = 'mssql';

$new_username = 'username';
$new_password = 'password';
$new_database = 'databasse';
$new_host = 'ip address';
$new_type = 'mysql';

$old = Database::get($old_username, $old_password, $old_database, $old_host, $old_type);
$new = Database::get($new_username, $new_password, $new_database, $new_host, $new_type);

然后我将 config.php 包含到我想要运行转换的任何文件中。

我截断了新表,以便可以根据需要运行脚本。接下来,我使用 $old 连接从表中选择所有记录,循环数据并使用 $new 连接插入 MySQL 数据库。

<?php
require 'config.php';

$new->truncate('car_parking');

$rows = $old->select("SELECT * from dbo.CarParking");
foreach ($rows as $row) {

    $data = [
        'id'  => $row->CarParkingID,
        'title'   => $row->Title,
    ];

    $new->insert('car_parking', $data);
}

在任何时候,我都可以在终端/命令提示符下运行它,方法是输入 php 后跟文件名,即`php carparking.php`

这将起作用,但如果您使用的是大型数据库,则为所有表编写查询将需要很长时间。

工具

MySQL Workbench 

您可以使用MySQL Workbench 来运行迁移向导。我发现设置起来相当复杂,而且进展缓慢,更糟糕的是,一些被视为错误格式的表格被完全遗漏了。

MS SQL 到 MySQL 转换器

MSSQL-to-MySQL 转换器还不错,假设两个数据库都在同一台机器上,设置简单。您可以直接转换为 MySQL 数据库或 SQL 文件。指定特定表或所有表。但是是付费的,试用版仅限于 50 条记录,您需要购买产品才能进行完整转换。49美元,可以节省工作时间。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。