#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()); и, возможно, напишите свой собственный, чтобы перехватывать предупреждения, которые вы хотите.. Но я думаю, что ваш домен должен обрабатывать «предупреждение / ошибку»: не предоставляйте базе данных недопустимые данные.