复制特殊字符,例如urdu从一个数据库到其他数据库的信件

时间:2016-02-11 06:53:18

标签: mysql perl

我正在尝试将数据从一个数据库复制到另一个数据库。

在db1中,有一列具有以下值:

|        19 | ٢       |
|        19 | ٣       |
|        19 | ٤       |
+----------------+---------+

db1 table和db2 table的charset是相同的:

ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

当我尝试复制它们时,它会存储为'?'标记。

使用Perl INSERT STATEMENT:

$dbh2->do( 'SET NAMES utf8;');
$dbh2->do( 'SET COLLATION utf8_general_ci;');

$select = $dbh1->prepare("SELECT * FROM db1");
$insert = $dbh2->prepare("INSERT INTO db2 VALUES(?,?,?,?)");
$select->execute;
while ( my($WORD,$SENSITIVE,$REGEXP) = $select->fetchrow_array )
{
  $insert->execute($WORD,$SENSITIVE,$REGEXP,'NULL');
}

WORD是列,其中包含urdu字符。

1 个答案:

答案 0 :(得分:0)

在纯ASCII中无法看到这些字符。 MySQL实例未配置为默认情况下从客户端连接期望UTF-8编码。

在插入操作之前运行以下查询:

SET NAMES utf8;

有关连接字符集的详细信息,您可以看到MySQL Documentation