DECIMAL (M), реализация позволяет определить значение M - PullRequest
0 голосов
/ 16 октября 2018

В документации говорится,

В стандартном SQL синтаксис DECIMAL (M) эквивалентен DECIMAL (M, 0).Аналогично, синтаксис DECIMAL эквивалентен DECIMAL (M, 0), где реализации разрешается определять значение M. MySQL поддерживает обе эти разновидности синтаксиса DECIMAL.

Часть, касающаясяDECIMAL(M) или DECIMAL(M,0), что меня смущает, это

Для DECIMAL (M, 0) реализации разрешено определять значение M.

Если для столбца установлено значение DECIMAL(65), 4.321 будет храниться как 4, что конкретно означает документация?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Чтобы сформулировать это по-другому и использовать значения, выбранные MySQL:

  • DECIMAL означает DECIMAL(10,0) (что занимает 5 байтов)
  • DECIMAL(12) означаетDECIMAL(12, 0) (где '12' может быть любым значением до 65)
  • То есть, всегда есть M и N, явно указано или нет.

КогдаN равно 0, десятичные дроби не сохраняются.Следовательно, 4.321 будет сохранено как 4. Числа, которые вы можете сохранить (без округления или усечения), представляют собой числа, содержащие не более N цифр после десятичной точки и не более MN цифр перед.

0 голосов
/ 16 октября 2018

При запуске этого теста в MySQL 5.6:

create table t(
deci decimal, 
deci4 decimal(4),
deci40 decimal(4,0),
deci42 decimal(4,2)
);


insert into t(deci, deci4, deci40, deci42)
values
(1234.1234,1234.1234,1234.1234,1234.1234);

Вставка завершается неудачно, потому что 1234.1234 не помещается в (4,2)

insert into t(deci, deci4, deci40, deci42)
values
(1234.1234,1234.1234,1234.1234,34.1234);

Запускается со следующими вставленными значениями:

deci    deci4   deci40  deci42  
1234    1234    1234    34.12

В DECIMAL(M,N), M - это количество мест, которое может занять число, включая десятичные дроби, N - количество десятичных знаков.Максимальное значение для M равно 65, а максимальное значение для N равно 30. N должно быть меньше, чем M.

Если N=0, то это 0 десятичных знаков.

Если N равноне определено, кажется, что десятичные разряды определяются числом мест, фактически занятых целой частью числа, которое меньше, чем M, а остальные места, оставленные для десятичных знаков, по мере необходимости.

Если ни один из них не определен, то по умолчанию M устанавливается на 10.

Информация о значениях по умолчанию, взятых отсюда: http://www.mysqltutorial.org/mysql-decimal/

...