MySql转储输出条件注释?执行转储作为查询以恢复数据库。

3

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

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

我已经在Google和MySql参考手册中搜索过了,但我找不到这些/*!32312的含义以及它们是如何工作的。我只能猜想它们是条件注释。比如说,如果版本号大于32312,则执行"IF NOT EXIST"?

有人能否解释一下这个问题?

我想知道这个原因是因为我正在尝试将这个转储文件作为C#客户端中的一个查询来执行还原操作,但遇到了问题。我正在使用以下代码:

            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二进制输出和退出代码等更方便...

2个回答

6

正如注释语法所解释的那样,它们确实是特定于版本的注释。

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

/*!40100 DEFAULT CHARACTER SET utf8 */;

这部分将仅在MySQL服务器版本为4.01.00或更高版本时执行。


非常好,非常感谢。我想我一直在错误的方向上寻找答案。正如您提供的URL中所完美解释的那样。 - Mike de Klerk

0

正如问题的原始发布者所述:


使用Query = Regex.Replace(QueryOrFilePath, @"(?:\/\*!\d+\s)|(?:\*\/)", @"", RegexOptions.Multiline);可以删除所有的类似于注释和版本说明的标记,只保留在特定版本注释内的查询。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接