Дозвуковой:Максимальная длина столбца таблицы (превышает)
-
21-09-2019 - |
Вопрос
Итак, мы используем SubSonic в качестве DAL / ORM для одного из наших проектов.Все шло гладко (база данных уже существовала, поэтому мы использовали SubSonic поверх нее), однако иногда мы сталкиваемся с исключением, в котором говорится что-то вроде того, что целое число превышает максимальную длину.В этом примере наше поле MySQL имеет знак int(4).Который, согласно документации MySQL, позволит выполнять ряд следующих действий:
-2147483647 - 2147483647.
Теперь мой вопрос: как определяется максимальная длина в дозвуковом режиме?Это из-за количества цифр?Потому что это означает, что он допускал бы только от -9999 до 9999, верно?Это кажется довольно большим расхождением, и я надеюсь, что это не так, иначе у нас возникнет масса других проблем.
Спасибо, -Стив
Решение
Используя Reflector и переходя к функции сохранения ActiveRecord (которая вызывает ValidateColumnSettings):
if ((!flag && (column.MaxLength > 0)) && ((column.DataType != DbType.Boolean) && (currentValue.ToString().Length > column.MaxLength)))
{
Utility.WriteTrace(string.Format("Max Length Exceeded {0} (can't exceed {1}); current value is set to {2}", column.ColumnName, column.MaxLength, currentValue.ToString().Length));
this.errorList.Add(string.Format(this.LengthExceptionMessage, str, column.MaxLength));
}
флаг устанавливается в значение true, если переменная равна null.Так что, да, это зависит от количества цифр (см.:toString().Длина).Похоже, это не имеет никакого смысла, поскольку MySQL не использует свойство length типа данных для определения количества цифр для значений на основе целых чисел.
Это дозвуковой 2.2.