параметры команды c # mysql addwithvalue усекает входное значение

#c# #mysql

#c# #mysql

Вопрос:

У меня есть этот случай, когда я обновляю таблицу базы данных MySQL с помощью c #. Обновленное поле — varchar(10). Проблема в том, что если передается значение более 10 символов, то записанное значение усекается, но без исключения. Это нормально? Я что-то упускаю?

Приведенный ниже код показывает, что это происходит

 string query = @"update params set paramvalue=@val where paramid='aParam'; 
    select paramvalue from params where paramid='aParam';";
MySqlConnection connection =
  new MySqlConnection("server=localhost;user=root;database=world;port=3306;password=******;");
connection.Open();
MySqlCommand command = new MySqlCommand(query, connection);

string myVal = "123456789012345";

command.Parameters.AddWithValue("@val", myVal);

string theirVal = command.ExecuteScalar().ToString();
Console.WriteLine(theirVal); // this outputs "1234567890"
  

Обновить:
Точно такая же команда возвращает предупреждение о выполнении в workbech client!

1 затронутая строка (строки), 1 предупреждение (ы): 1265 усеченных данных для столбца ‘ParamValue’ в строке 1 Совпадение строк: 1 Изменение: 1 Предупреждения: 1 0,000 сек

Могу ли я использовать это предупреждение в клиенте MySQL в своем коде? Есть предложения? Я не могу найти способ…

Комментарии:

1. Да, это правильное поведение

2. Да, это нормально. varchar(10) это поле длиной всего 10 символов. Все, что больше этого, будет усечено

3. Я бы не сказал, что это правильное поведение, скорее это ожидаемое поведение, поскольку MySQL не хочет выдавать ошибку, когда усечение будет происходить по умолчанию, как и многие другие вещи.

4. Это моя точка зрения, поскольку, я думаю, SQLServer выдает исключение для аналогичного случая…

5. dev.mysql.com/doc/connector-net/en/… Используйте это как ссылку: MySqlTrace. Слушатели. Add(new consolettracelistener()); и, возможно, напишите свой собственный, чтобы перехватывать предупреждения, которые вы хотите.. Но я думаю, что ваш домен должен обрабатывать «предупреждение / ошибку»: не предоставляйте базе данных недопустимые данные.