3

注意:实际上是两个问题...

当我使用二进制文件转储 mysql 数据库时,mysqldump我得到一个包含(除其他行外)以下内容的文件: CREATE DATABASE /*!32312 IF NOT EXISTS*/MyDatabase/*!40100 DEFAULT CHARACTER SET utf8 */;

我在 Google 和 MySql 参考资料上进行了搜索,但找不到 /*!32312 的含义以及它们的工作原理。我只能猜测它们是有条件的评论。比如如果构建> 32312,执行“如果不存在”?

任何人都可以对此有所了解吗?

我想知道这一点的原因是因为我无法在 C# 客户端中使用转储的内容作为 1 查询执行还原。使用此代码:

            MySqlConnection msc = default(MySqlConnection);
            MySqlCommand cmd = default(MySqlCommand);
            MySqlTransaction mst = default(MySqlTransaction);
            try
            {
                //Create a connection to the database
                msc = new MySqlConnection(ConnectionString);
                msc.Open();

                //Creata a MySql Transaction
                mst = msc.BeginTransaction();

                cmd = msc.CreateCommand();
                cmd.Transaction = mst;
                cmd.CommandText = ContentsOfMySqlDumpSql;

                cmd.ExecuteNonQuery();

                mst.Commit();
            }

我真的必须将mysql作为带有命令行参数的进程来恢复转储吗?因为我真的想在 C# 客户端中使用它作为 SQL 查询来完成转储的恢复,因为它比控制 mysql 二进制文件输出和退出代码等更方便......

4

2 回答 2

6

它们确实是特定于版本的注释,如注释语法中所述。

这些注释仅在服务器支持时才允许执行语句的可选部分。

/*!40100 DEFAULT CHARACTER SET utf8 */;

表示只有在 MySQL 服务器版本为 4.01.00 或更高版本时才会执行此部分。

于 2013-04-04T11:09:07.667 回答
0

正如问题的原始海报所述:


使用Query = Regex.Replace(QueryOrFilePath, @"(?:\/\*!\d+\s)|(?:\*\/)", @"", RegexOptions.Multiline);将删除所有注释和版本-a-like 符号,仅将查询保留在特定于版本的注释内。

如果您确定在版本兼容的数据库上执行查询,这很有用。

于 2013-04-06T21:10:40.310 回答