2011-08-09 30 views
23

Tengo una tabla de base de datos con algunos campos, uno de ellos, cost, está configurado en el tipo de datos DECIMAL. Establecí los parámetros en 4,2, lo que debería permitir 4 números antes del punto decimal y 2 después.Cómo insertar DECIMAL en la base de datos MySQL

(me han dicho que el 4 aquí es la cantidad total y el 2 es la cantidad después del punto decimal, podría alguien por favor aclarar eso en una nota?)

Al insertar datos a través una solicitud POST (el valor 3.80 por ejemplo) los datos almacenados en mi base de datos son realmente 99.99.

¿Qué estoy haciendo mal para causar esto?

Aquí está la tabla:

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`title` varchar(256) NOT NULL, 
`cost` decimal(4,2) NOT NULL, 
PRIMARY KEY (`id`) 
) 

Aquí es mi complemento consulta:

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80') 

Actualización: Funciona después de cambiar entre 4,2 a 6,2

+0

Veamos la declaración create table y el sql utilizado para insertar los valores – Mark

Respuesta

30

Los tipos decimales de MySql son un poco más complicados que solo a la izquierda -y a la derecha- del punto decimal.

El primer argumento es precisión, que es el número total de dígitos. El segundo argumento es , escala, que es el número máximo de dígitos a la derecha del punto decimal.

Por lo tanto, (4,2) puede ser cualquier cosa de -99.99 a 99.99.

cuanto a por qué usted está recibiendo 99.99 en lugar de la deseada 3.80, el valor que está insertando debe interpretarse en el más grande que 99.99, por lo que se utiliza el valor máximo. Tal vez podría publicar el código que está utilizando para insertar o actualizar la tabla.

Editar

Se ha corregido un malentendido de la utilización de la escala y precisión, por http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html.

6

Sí, 4,2 significa "4 dígitos en total, 2 de los cuales son posteriores al lugar decimal". Eso se traduce a un número en el formato de 00.00. Más allá de eso, tendrás que mostrarnos tu consulta SQL. PHP no traducirá 3.80 en 99.99 sin una buena razón. Tal vez desalineó sus campos/valores en la consulta y está tratando de insertar un número más grande que pertenece a otro campo.

2

me di cuenta de algo más acerca de su codificación .... mira

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80') 

en el código "CREATE TABLE" que tiene el conjunto de Identificación "AUTO_INCREMENT" que significa que está generando automáticamente un resultado para ese campo. ... pero en su código anterior lo incluye como una de las inserciones y en los "VALORES" tiene un 0 allí ... idk si esa es su forma de decirnos que lo dejó en blanco porque está configurado en AUTO_INC. o si ese es el código real que tiene ...si es el código que haya no sólo en caso de que no esté intentando enviar datos a un conjunto de campos para generar de forma automática, pero la manera correcta de hacerlo mal sería

'0', 

pones

0, 

lol .... por lo que podría estar causando el problema ... También me di cuenta en el código después de la "descripción de la prueba" que tienes un espacio antes del '.... que podría estar arrojando algo también .. .. idk .. Espero que esto ayude n quizás resuelva algún otro problema que quizás te estés sacando del pelo ahora ... hablando de eso ... Tengo que resolver mi problema antes de arrancarme todo el pelo. .... buena suerte .. :)

ACTUALIZACIÓN .....

Casi lo olvido ... si tiene el 0 a demostrar que está en blanco ... usted podría estar entrando en "título de prueba" como el ID y "descripción de la prueba" como el título y luego "3.cualquier centavo" para la descripción que deja "el costo" vacío ... lo cual podría ser el motivo por el que se agotó porque si no estoy confundiendo, lo tienes configurado como NOT NULL. ... y lo dejó nulo ... por lo que forzó algo ... tal vez .... lol

+2

Gracias por su respuesta - Tenía sin embargo, aceptó la respuesta correcta 2 meses antes de agregar la suya. Pasar '0' a un campo que está establecido en' auto_increment' es lo mismo que dejarlo en blanco. – Alex

Cuestiones relacionadas