Дозвуковой:Максимальная длина столбца таблицы (превышает)

StackOverflow https://stackoverflow.com/questions/2097694

Вопрос

Итак, мы используем 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top