類型轉換是我們日常開發中經常會遇到的一個需求,最近在將浮點型轉換成字符型的時候就遇到了一個問題,所以總結分享出來,下面這篇文章主要給大家介紹了MySQL中關於浮點型轉字符型可能遇到的問題的相關資料,需要的朋友可以參考下。
前言
本文主要介紹給大家介紹了MySQL中將浮點型轉字符型的時候遇到的一個問題,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
一問題描述
今天遇到一個刷資料的需求,是修改產品的重量(欄位類型為float),修改了產品的重量之後,是需要記錄到日誌表中的(字段類型為varchar),表結構如下:
臨時刷資料表:
CREATE TABLE `temp_170830` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `goods_sn` varchar(255) NOT NULL DEFAULT '' COMMENT '产品编码', `goods_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '产品重量', `actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '实际重量', `new_actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '新的实际重量', `create_user` varchar(30) NOT NULL DEFAULT '' COMMENT '创建人', PRIMARY KEY (`id`), KEY `idx_goods_sn` (`goods_sn`) ) ENGINE=InnoDB AUTO_INCREMENT=8192 DEFAULT CHARSET=utf8 COMMENT='临时刷重量表';
日誌表:
CREATE TABLE `log_weight` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `goods_sn` varchar(50) NOT NULL DEFAULT '' COMMENT '产品编码', `which_col` varchar(100) NOT NULL DEFAULT '' COMMENT '修改字段', `old_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT '更新前值', `new_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT '更新后值', `update_user` varchar(100) NOT NULL DEFAULT '' COMMENT '创建人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `wh_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间', PRIMARY KEY (`id`), KEY `idx_goods_sn` (`goods_sn`), KEY `idx_update_user` (`update_user`), KEY `wh_update_time` (`wh_update_time`) ) ENGINE=InnoDB AUTO_INCREMENT=14601620 DEFAULT CHARSET=utf8 COMMENT='重量修改日志';
如上面建立的表所示,我需要將temp_170830表的actual_weight和new_actual_weight字段分別刷入log_weight表的old_value和new_value字段,SQL語句如下:
INSERT INTO log_weight(goods_sn, which_col, old_value, new_value, update_user) SELECT goods_sn,'actual_weight',actual_weight,new_actual_weight,create_user FROM temp_170830;
本來以為到這裡就已經大功告成了,畢竟只是插入一些日誌記錄,畢竟後來為了簡單的進行核對,發現資料有些不對勁,如下圖所示:
#臨時表資料截圖:
##日誌表資料截圖:
對比可以發現,插入的日誌記錄資料無緣無故後面多了很多位元的小數,不知道從哪裡冒出來的,後來一想,可能是本來浮點型的數據就是除不盡的,轉成varchar的時候就把後面的那些也給帶出來了,暫時也不是很確定,後續確定之後再補充,然後自己暫時找了一個轉varchar的方法concat,調整如下:INSERT INTO log_weight(goods_sn, which_col, old_value, new_value, update_user) SELECT goods_sn,'actual_weight',concat(actual_weight,''),concat(new_actual_weight,''),create_user FROM temp_170830;順利解決日誌記錄問題。
總結如下:
以上是MySQL中關於浮點型轉換成字元型出現的一些問題解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!