2010-06-07 2 views
2

У меня есть столбец int(11), который используется для хранения денег. Я прочитал некоторые ответы на SO, и мне кажется, что мне просто нужно обновить его до типа данных decimal (19,4).Процедура преобразования int в десятичный тип данных?

Есть ли какие-либо проблемы, о которых я должен знать, прежде чем я действительно сделаю конвертацию? Мое приложение находится в PHP/Zend, и я не использую ORM, поэтому я сомневаюсь, что мне нужно будет обновить любой класс, чтобы последовательно идентифицировать тип данных.

+0

4 десятичных цифры? какую валюту вы собираетесь хранить? –

+0

Не должно быть никаких проблем с изменением типа данных в таблице, но операции с данными являются подозрительными - о чем мы не знаем из вашего сообщения ... –

+0

@Col - USD. Просто «19,4» были в одном из ответов. Я думаю, '19,2' будет делать за доллар. –

ответ

3
mysql> CREATE TABLE t1 (
    -> id INT NOT NULL AUTO_INCREMENT, 
    -> money INT(11) NOT NULL, 
    -> PRIMARY KEY(id)) 
    -> ENGINE = MyISAM; 
Query OK, 0 rows affected (0.01 sec) 

mysql> DESCRIBE t1; 
+-------+---------+------+-----+---------+---------------- 
| Field | Type | Null | Key | Default | Extra 
+-------+---------+------+-----+---------+---------------- 
| id | int(11) | NO | PRI | NULL | auto_increment 
| money | int(11) | NO |  | NULL | 
+-------+---------+------+-----+---------+---------------- 
2 rows in set (0.01 sec) 

mysql> SELECT * FROM t1; 
Empty set (0.00 sec) 

mysql> INSERT INTO t1 (money) VALUES (`10.01`); 
ERROR 1054 (42S22): Unknown column '10.01' in 'field list' 
mysql> INSERT INTO t1 (money) VALUES ('10.01'); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT * FROM t1; 
+----+-------+ 
| id | money | 
+----+-------+ 
| 1 | 10 | 
+----+-------+ 
1 row in set (0.00 sec) 

mysql> ALTER TABLE t1 MODIFY COLUMN money DECIMAL(19,4); 
Query OK, 1 row affected (0.02 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> SELECT * FROM t1; 
+----+---------+ 
| id | money | 
+----+---------+ 
| 1 | 10.0000 | 
+----+---------+ 
1 row in set (0.00 sec) 

mysql> INSERT INTO t1 (money) VALUES ('10.12'); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT * FROM t1; 
+----+---------+ 
| id | money | 
+----+---------+ 
| 1 | 10.0000 | 
| 2 | 10.1200 | 
+----+---------+ 
2 rows in set (0.00 sec) 

У вас нет никаких проблем с дд, когда вы изменяете Int в десятичную. Но вы должны просмотреть свой PHP-код, чтобы убедиться, что ваш код работает с десятичным значением правильно.

+1

Хе-хе, это стиль: сохраняя ваши ошибочные обратные сигналы вместо кавычек в выходе :) – Wrikken