【问题标题】:How can I create a MySQL database from a Perl script?如何从 Perl 脚本创建 MySQL 数据库?
【发布时间】:2011-02-17 06:31:38
【问题描述】:

我正在尝试在 Perl 中创建一个数据库,但它一直试图要求我使用一个数据库。 这是我的代码:

my @db_months = qw(JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC);

foreach my $db_month (@db_months)
{
  ## create db
  my $db_name = $db_month.$Year;
  my $dbh = DBI->connect($dns, $user, $password) or die "Unable to connect: $DBI::errstr\n"; 
  my $row = $dbh->do("CREATE DATABASE '".$db_name."' DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;"); 
  $dbh->disconnect(); 
}

请帮忙。

【问题讨论】:

  • $dns 包含什么?你得到什么错误?
  • 在这种情况下,$dns 的更好命名是 $dsn
  • 同意。一般来说,DNS = 域名系统,DSN = 数据源名称。
  • 正如其他人所说,哪一行抛出错误,错误是什么?另外,每个月都有一张桌子?听起来你做的数据库模式都错了,除非你有一个非常不寻常的要求,这是必要的。

标签: mysql database perl dbi


【解决方案1】:

只需省略database=$database;

$dbh = DBI->connect("DBI:mysql:host=$host;port=$port", $user, $pw);
$dbh->do("create database test") or die "Cannot create database \n ";

【讨论】:

    【解决方案2】:

    知道哪一行出现错误以及确切的错误是什么确实很有帮助。

    尝试在数据库名称周围使用反引号 (`) 而不是单引号 (')...

    【讨论】:

      【解决方案3】:

      可以使用DBD::mysqlserver administration function

      my $rc = $dbh->func( 'createdb', $db_name, 'admin' );
      

      【讨论】:

      • 我可以用 createdb 指定排序规则吗?我在 DBD/mysql.pm 中没有找到它
      • 不,你不能。我真的不喜欢 DBD::mysql 的这一部分。
      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2010-12-12
      • 2011-10-21
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      相关资源
      最近更新 更多