PDA

View Full Version : [MySql] Disperzione con insert


D4rkAng3l
18-02-2008, 23:20
Ragazzi...è urgente...devo finire il progetto dell'esame entro 24 ore...

Bene ho una tabella definita in questo modo


create table INSERZIONE
(
Id_Oggetto int not null auto_increment primary key,
Titolo varchar(60) not null,
Descrizione text,
Costo_Base float(4,2),
Scadenza datetime,
Compralo_Subito float(4,2),
Id_Venditore varchar(20) not null references UTENTE(User_Id),
Id_Categoria varchar(30) not null references CATEGORIA(Id_Categoria)
) type=InnoDB;


Dentro i campi Costo_Base e Compralo_Subuito che sono dei float ci devo mettere dei prezzi che potrebbero avere la virgola (i prezzi sono del tipo 500 riferito a 500 € oppure 1,5 per dire un euro e mezzo).

Ho provato ad inserire dei dati in questa tabella ma mi và in errore e non capisco perchè...se faccio la seguente insert:

insert into INSERZIONE values
(NULL, 'Olimpus E-510', 'Reflex digitale Olympus con sensore 10,1 MP stabilizzato', 200, '2008-02-20', 250, 'Fotografo84', 11);


mi dà il seguente errore:

"ERROR 1264 (22003): Out of range value adjusted for column 'Costo_Base' at row 1"

Vi prego mi date una mano a risolvere? cosa c'è che non và? Se non consegno entro il 20 mattina mi tocca fare l'orale a Giugno e mi suicido :cry:

gugoXX
18-02-2008, 23:57
Ragazzi...è urgente...devo finire il progetto dell'esame entro 24 ore...

Bene ho una tabella definita in questo modo


create table INSERZIONE
(
Id_Oggetto int not null auto_increment primary key,
Titolo varchar(60) not null,
Descrizione text,
Costo_Base float(4,2),
Scadenza datetime,
Compralo_Subito float(4,2),
Id_Venditore varchar(20) not null references UTENTE(User_Id),
Id_Categoria varchar(30) not null references CATEGORIA(Id_Categoria)
) type=InnoDB;


Dentro i campi Costo_Base e Compralo_Subuito che sono dei float ci devo

mettere dei prezzi che potrebbero avere la virgola (i prezzi sono del tipo 500 riferito a 500 € oppure 1,5 per dire un euro e mezzo).

Ho provato ad inserire dei dati in questa tabella ma mi và in errore e non capisco perchè...se faccio la seguente insert:

insert into INSERZIONE values
(NULL, 'Olimpus E-510', 'Reflex digitale Olympus con sensore 10,1 MP stabilizzato', 200, '2008-02-20', 250, 'Fotografo84', 11);


mi dà il seguente errore:

"ERROR 1264 (22003): Out of range value adjusted for column 'Costo_Base' at row 1"

Vi prego mi date una mano a risolvere? cosa c'è che non và? Se non consegno entro il 20 mattina mi tocca fare l'orale a Giugno e mi suicido :cry:

Ma poveraccio, ma come potrebbe distinguere la virgola che hai messo per separare i campi dalla virgola del numero?
I campi si separano sempre con le virgole sempre. Il punto decimale si chiama punto decimale, la virgola la usano solo in Italia.

D4rkAng3l
19-02-2008, 00:06
Ma poveraccio, ma come potrebbe distinguere la virgola che hai messo per separare i campi dalla virgola del numero?
I campi si separano sempre con le virgole sempre. Il punto decimale si chiama punto decimale, la virgola la usano solo in Italia.

no quei numeri 200 e 250 cme sono interi...la virgola separa i campi...non capisco che intendi...

gugoXX
19-02-2008, 00:38
Guarda, invento perche' MySql l'ho usato una volta sola.
Usa questa sintassi della insert:
INSERT INTO Tabella(campo,campo,campo) values(valore,valore,valore);
non specificare la chiave primaria (ovvero ne' tra i campi ne' tra i valori)

Non userei come tipo: float(4,2). userei solo float.
ID_Categoria e' una stringa, non l'hai messa fra apici

D4rkAng3l
19-02-2008, 00:46
Guarda, invento perche' MySql l'ho usato una volta sola.
Usa questa sintassi della insert:
INSERT INTO Tabella(campo,campo,campo) values(valore,valore,valore);
non specificare la chiave primaria (ovvero ne' tra i campi ne' tra i valori)

Non userei come tipo: float(4,2). userei solo float.
ID_Categoria e' una stringa, non l'hai messa fra apici

l'errore era un altro...praticamente float(4,2) significa che hai un numero formato di 4 cifre di cui le ultime 2 sono dopo la virgola quindi ci puoi rappresentare valori come 12,43 oppure 99,99 ma non 200 perchè sarebbe 200,00 ed è di 5 cifre...ci stavo impazzendo...tnx cmq ;-) ma te che DBMS usi?

gugoXX
19-02-2008, 00:48
Oracle o SqlServer.
Appunto dicevo di mettere float senza la specifica della precisione, tanto non serve che giustifichi lo spazio.

D4rkAng3l
19-02-2008, 00:53
oralo ho cambiato float con decimal perchè leggevo che a volte float fà delle cose strane con le approssimazioni...ma perchè cmq posso metterlo anche senza specificare la precisione? e come funziona se non la specifico?

gugoXX
19-02-2008, 01:02
Se non lo specifichi funziona a seconda di come e' definito il default in MySql. In SqlServer p.es. occuperebbe 8 byte, come il double del C.