如何在Visual Studio中的MySql中禁用严格模式?

时间:2018-01-27 12:52:36

标签: c# mysql visual-studio-2017 nuget-package

我最近尝试在远程服务器上使用MySql和外部数据库,但每当我尝试在Text / Blob上设置默认值时,我都会收到错误消息。

MySql.Data.MySqlClient.MySqlException: 'BLOB/TEXT column 'prefix' can't have 
a default value'

显然,问题在于仅针对Windows发生的错误......(?)

我在Visual Studio环境中使用C#。 我使用Nuget获得了MySql包。但是我没有在网上找到告诉我如何在Visual Studio环境中禁用Strict模式的指南。

我的计算机上没有任何my.ini文件,因为我没有安装任何Mysql文件,如上所述,我使用Nuget来获取我项目的软件包。

如果可能的话,你能告诉我如何禁用允许我在Text / Blob上使用默认值的严格模式吗?

编辑: 对于那些想在这里看到sql行的人来说:

String sql = "CREATE TABLE IF NOT EXISTS servers_preferneces (server_id TEXT,prefix TEXT DEFAULT '/', days_to_be_missing INT DEFAULT 3, excused_rank_name TEXT DEFAULT 'AWOL', " +
        "excused_rank_id TEXT DEFAULT '', missing_rank_name TEXT DEFAULT 'MIA', missing_rank_id TEXT DEFAULT NULL, welcome_state INTEGER DEFAULT 0, welcome_message TEXT DEFAULT ''," +
        " welcome_channel_id TEXT DEFAULT 'DEFAULT'); "; 

假设使用以下代码行执行:

MySqlCommand command = new MySqlCommand(sql, db_connection);
MySqlDataReader reader;
reader = command.ExecuteReader();

1 个答案:

答案 0 :(得分:0)

MySQL服务器不支持DEFAULTTEXT列的BLOB值;这是数据库引擎的known issue

如果服务器在严格模式下运行,则会产生您看到的错误。如果服务器未处于严格模式,则只会出现警告。

但是,即使您在服务器上关闭了严格模式,您的代码仍然无法正常运行:行将插入NULL s,而不是您指定的DEFAULT值。

修复方法是将架构更改为不具有DEFAULT值,并在INSERT语句中显式插入所需的默认值。

-- SQL
CREATE TABLE IF NOT EXISTS servers_preferneces
(
    server_id TEXT,
    prefix TEXT,
    days_to_be_missing INT DEFAULT 3,
    excused_rank_name TEXT,
    excused_rank_id TEXT,
    missing_rank_name TEXT,
    missing_rank_id TEXT,
    welcome_state INTEGER DEFAULT 0,
    welcome_message TEXT,
    welcome_channel_id TEXT );

// C#
using (var command = connection.CreateCommand())
{
    command.CommandText = @"INSERT INTO servers_preferneces(prefix,
        excused_rank_name, excused_rank_id, missing_rank_name
        welcome_message, welcome_channel_id)
        VALUES(@prefix, @excused_rank_name, @excused_rank_id,
        @missing_rank_name, @welcome_message, @welcome_channel_id);";
    command.Parameters.AddWithValue("@prefix", "/");
    command.Parameters.AddWithValue("@excused_rank_name", "AWOL");
    command.Parameters.AddWithValue("@excused_rank_id", "");
    command.Parameters.AddWithValue("@missing_rank_name", "MIA");
    command.Parameters.AddWithValue("@welcome_message", "");
    command.Parameters.AddWithValue("@welcome_channel_id", "DEFAULT");
    // add other parameters

    command.ExecuteNonQuery();
}