Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql转储输出条件注释?执行转储为查询以恢复数据库_Mysql_Comments_Restore_Dump - Fatal编程技术网

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

MySql转储输出条件注释?执行转储为查询以恢复数据库,mysql,comments,restore,dump,Mysql,Comments,Restore,Dump,注意:实际上有两个问题 当我使用mysqldump二进制文件转储mysql数据库时,我得到一个包含以下内容的文件(除其他行外): CREATE DATABASE/*!32312如果不存在*/MyDatabase/*!40100默认字符集utf8*/ 我已经在Google和MySql参考上搜索过了,但是我找不到那些/*!32312的意思,以及它们是如何工作的。我只能猜测它们是有条件的评论。例如,如果构建>32312,则执行“如果不存在” 有人能解释一下吗 我之所以想知道这一点,是因为我无法在C#c

注意:实际上有两个问题

当我使用
mysqldump
二进制文件转储mysql数据库时,我得到一个包含以下内容的文件(除其他行外):
CREATE DATABASE/*!32312如果不存在*/
MyDatabase
/*!40100默认字符集utf8*/

我已经在Google和MySql参考上搜索过了,但是我找不到那些/*!32312的意思,以及它们是如何工作的。我只能猜测它们是有条件的评论。例如,如果构建>32312,则执行“如果不存在”

有人能解释一下吗

我之所以想知道这一点,是因为我无法在C#client中使用dump as 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#client中将转储作为SQL查询来完成转储的恢复,因为它比控制mysql二进制文件输出和退出代码等更方便…

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

只有在服务器支持的情况下,这些注释才允许执行语句的可选部分

/*!40100 DEFAULT CHARACTER SET utf8 */;
意味着仅当MySQL服务器的版本为4.01.00或更高版本时,才会执行此部分。

如问题的原始海报所述:


使用
Query=Regex.Replace(QueryOrFilePath,@“(?:\/\*!\d+\s)(?:\*\/)”,@“,”,RegexOptions.Multiline)
将删除所有注释和类似于版本a的注释,并且只将查询保留在特定于版本的注释中


如果您确定要在版本兼容的数据库上执行查询,则此功能非常有用。

太好了,非常感谢。我想我看错方向了。正如您提供的URL中完美解释的那样。