2013-01-08 22 views
8

następujące zapytanie:Ostrzeżenie # 1264: z zakresu błędu w mysql

INSERT INTO skill (`emp_number`, `skill_id`, `year_exp`, `comments`) 
VALUES ('4', '3', '23.45', '') 

To powoduje błąd:

1 row inserted. 
Warning: #1264 Out of range value for column 'year_exp' at row 1 
year_exp column is of datatype decimal(2,2) 

Proszę mi pomóc kufel się błąd.

+1

Jaka jest wartość ** wstawionego ** rekordu teraz? – inhan

+0

@inhan thanksinhan. Wartość to 0,99 – Misty

+2

Użyj 'decimal (4,2)', aby naprawić swój błąd i przeczytaj, jak określić poprawne wartości dla tego typu danych w dokumentach MySQL. –

Odpowiedz

8

Zmień typ pola na decimal(4,2). Szczegóły: https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html

Składnia deklaracji dla kolumny DECIMAL to DECIMAL (M, D). Zakresy wartości dla argumentów w MySQL 5.7 są następujące:

M to maksymalna liczba cyfr (precyzja). Ma zakres od 1 do 65.

D to liczba cyfr po prawej stronie przecinka dziesiętnego (skala). Ma zakres od 0 do 30 i nie może być większa niż M.

+0

dzięki. Teraz zrozumiałem – Misty

+1

@ CharlieS masz rację, edytowane. – czachor

11

wierzę masz ten błąd, ponieważ pole year_exp jest DECIMAL(2,2) i chcesz DECIMAL(4,2). DECIMAL(2,2) oznacza liczbę dokładności 2, z dokładnością do 2 miejsc po przecinku. Ale ta liczba ma 4 cyfry precyzji.

Ten link do MSDN mówi o dokładności dziesiętnej.

http://msdn.microsoft.com/en-US/library/ms187746(v=SQL.90).aspx

Oto szybki test z podobnymi wynikami (wykonane w SQL Server 2008, ale myślę, że jesteś na MySQL ...)

1) utworzono tabelę z kolumną testu:

CREATE TABLE testtable (testcolumn DECIMAL(2,2)) 

2) Ran iNSERT ...:

INSERT INTO testtable (testcolumn) VALUES (23.45) 

... i pojawił się ten błąd ...

Msg 8115, Level 16, State 8, wiersz 1
arytmetyczny błąd przepełnienia konwersji numerycznej typu dane liczbowe.

(KOMENTARZ: jeden z moich fave błędów ... "nie można przekonwertować liczbę na numer ..." ha ha)

3) zmiany w kolumnie do odpowiednich specyfikacji

ALTER TABLE testtable ALTER COLUMN testcolumn DECIMAL(4,2) 

4) Ponownie uruchom tę samą instrukcję wstawiania. To działa.

Proszę dać mi znać, jeśli to pomaga.

+0

dziękuję u @ user1958225 – Misty

+0

Wyjaśnienie jest dobre. To jest również właściwa odpowiedź dla mnie. – junerockwell

Powiązane problemy