【发布时间】:2015-10-30 01:12:33
【问题描述】:
全新的 MySQL 并且我正在尝试编写一个 Perl 脚本来访问我自己机器上的 MySQL 数据库(最终希望使用该脚本将数据从远程机器上的 SQL Server 数据库复制到 MySQL 数据库我自己的机器,但首先我需要让它访问我的服务器)。
我编写了以下在 MySQL Workbench 中运行良好的代码:
use test;
DROPTABLE IF EXISTS alerts;
请不要我在这里把 DROPTABLE 写成一个词,因为当我把它写成 2 个词时,stackoverflow 不会让我发布它,而是给我一个错误。在实际代码中,它是 2 个字。如果有人可以编辑此问题以使其成为 2 个单词,请执行此操作,但是当我尝试编辑它时,我在发布时遇到了同样的错误。
CREATE TABLE alerts (
alertid INT NOT NULL,
alertdttm DATE NOT NULL,
alerttype VARCHAR(256) NOT NULL,
userid INT NOT NULL,
alerttext VARCHAR(1024) NULL
);
但是,当我使用以下 Perl 脚本时出现错误:
$sql_my = <<'END_SQLmy';
use test;
DROPTABLE IF EXISTS alerts;
CREATE TABLE alerts (
alertid INT NOT NULL,
alertdttm DATE NOT NULL,
alerttype VARCHAR(256) NOT NULL,
userid INT NOT NULL,
alerttext VARCHAR(1024) NULL
);
END_SQLmy
$dbh2 = DBI->connect( "dbi:ODBC:MySQL57") || die "Cannot connect: $DBI::errstr";
print "Connecting to MySQL database.\n";
$sth2 = $dbh2->prepare($sql_my);
$sth2->execute;
DBD::ODBC::st 执行失败:[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.9-log]您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在“DROPTABLE IF EXISTS alerts;”附近使用的正确语法;
我玩弄了代码并将其更改为
my $table = "alerts1";
$dbh2 = DBI->connect($dsn, $user, $pw);
$dbh2->do("CREATE TABLE $table (column VARCHAR(17));");
$dbh2->disconnect;
这也可以很好地连接,但给我一个 CREATE TABLE 行的错误,
BDB::mysql::db do failed: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 testmysql.pl 第 51 行的第 1 行的 'column VARCHAR{17))' 附近使用正确的语法。
所以我认为这就是我的语法错误的来源,但我不知道如何解决它。我检查了用户的权限,它似乎具有正确的权限,它可以很好地删除表,但它无法创建它。但是,当我在 MySQL Workbench 中运行相同的查询时,它会创建表,所以我知道语法没问题。知道问题是什么吗? (仅供参考,我使用 MySQL 5.3 unicode 驱动程序使用 localhost、端口 3306 以及 root 用户和密码设置了 ODBC。我在 Windows 7 机器上。)
(另外,如果有人知道将数据从远程 SQL Server 复制到本地 MySQL 数据库的非常好的方法,请随时加入。现在我想出的最好的想法是从使用 Perl 的远程计算机,然后将其推送到本地数据库,希望我可以在一个快速脚本中完成。)
【问题讨论】:
-
另外,如果有人知道将数据从远程 SQL Server 复制到本地 MySQL 数据库的非常好的方法,请随时加入。 你的意思就像 @987654326 @ 和
mysql?见:Copy a database from one server to another