我最近尝试在远程服务器上使用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();
答案 0 :(得分:0)
MySQL服务器不支持DEFAULT
或TEXT
列的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();
}