我使用的是MySqlBackup.dll (MySqlBackup.NET),它使用MySql.Data.dll转储数据库。我认为是MySqlBackup.NET导致了这种行为,所以我把它从等式中去掉了。如果我在我的解决方案中运行以下代码:
Dim cmd = New MySqlCommand()
cmd.Connection = New MySqlConnection(connectionString)
cmd.Connection.Open()
Dim result = QueryExpress.ExecuteScalarStr(cmd, "SHOW CREATE TABLE `airportcodes`;", 1)
cmd.Connection.Close()我得到了
CREATE TABLE "airportcodes" (
"AirportCodeId" int(11) NOT NULL AUTO_INCREMENT,
"Code" varchar(4) CHARACTER SET utf8 NOT NULL,
"AirportName" varchar(100) CHARACTER SET utf8 DEFAULT NULL,
"Website" varchar(100) CHARACTER SET utf8 DEFAULT NULL,
"LastUpdate" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ("AirportCodeId")
)我不能用它来恢复,因为它使用了双引号。当我同时使用上面的代码和MySqlBackup.NET时就会出现这种情况,如果我使用MySqlBackup.NET测试应用程序的源代码,结果是正确的(使用反引号而不是双引号)。
如果我在mysql CLI中执行这个查询,我也会得到正确的版本(带反引号)。我到处都在使用相同的连接字符串。
在转储创建之后搜索并替换会让人感觉很愚蠢。这可能是什么原因呢?
发布于 2018-11-20 18:59:01
这与MySqlBackup.NET无关
它是MySql服务器的行为,可以配置为MySQL服务器的默认(全局)行为或临时(会话)行为。
下面是您可以亲自试用的SQL语句:
示例1:带双引号的导出表结构:
set session sql_mode=ANSI_QUOTES;
show create table `configkey`;输出:
CREATE TABLE "configkey" (
"key" varchar(100) NOT NULL,
"value" text,
PRIMARY KEY ("key")
) ENGINE=InnoDB DEFAULT CHARSET=utf8示例2:使用单引号导出表结构
set session sql_mode=traditional;
show create table `configkey`;输出:
CREATE TABLE `configkey` (
`key` varchar(100) NOT NULL,
`value` text,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8有关更多信息,请参阅MySQL官方文档的主题: SQL-MODE https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_sql-mode https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
如果您看到列名在缺省情况下用双引号括起来,很可能您的MySQL服务器在缺省情况下被配置为以这种方式进行反应。您可以咨询您的MySQL服务器管理员或提供商。
您也可以在每次执行MySqlBackup.NET之前手动配置SQL_MODE,示例如下:
using (MySqlConnection conn = new MySqlConnection(constring))
{
using (MySqlCommand cmd = new MySqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
cmd.Connection = conn;
conn.Open();
cmd.CommandText = "set session sql_mode=traditional;";
cmd.ExecuteNonQuery();
mb.ExportToFile(file);
conn.Close();
}
}
}https://stackoverflow.com/questions/32015189
复制相似问题