一、MySQL文檔說decimal 的最大位數(shù)是 65,什么意思
DECIMAL從MySQL 5.1引入,列的聲明語法是DECIMAL (M,D)。NUMERIC與DECIMAL同義,如果字段類型定義為NUMERIC,則將自動轉(zhuǎn)成DECIMAL。對于聲明語法DECIMAL (M,D),自變量的值范圍如下:M是最大位數(shù)(精度),范圍是1到65。可不指定,默認(rèn)值是10。
— #1 問題分析
— 65是最大的位數(shù)(含整數(shù)和小數(shù)點(diǎn)部分)。
— #2 代碼示例
CREATE TABLE tb_datatype (
? id int(11) DEFAULT NULL,
? smallintcol smallint(6) DEFAULT NULL,
? smallintcol2 smallint(3) DEFAULT NULL,
? decimalcol decimal(65,38) DEFAULT NULL,
? smallintcol3 smallint(3) unsigned zerofill DEFAULT NULL,
? smallintcol4 smallint(5) unsigned DEFAULT NULL,
? seq int(11) NOT NULL AUTO_INCREMENT,
? PRIMARY KEY (seq)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3
INSERT INTO tb_datatype(id) VALUES(1);
— #2.1 整數(shù)部分不能超過27
UPDATE tb_datatype
SET decimalcol= REPEAT(9,28)
WHERE id = 1
> 1264 – Out of range value for column ‘decimalcol’ at row 1
> 時間: 0s
— #2.2 整數(shù)部分最大到27
UPDATE tb_datatype
SET decimalcol= REPEAT(9,27)
WHERE id = 1
> Affected rows: 1
> 時間: 0.058s
— #2.3 小數(shù)點(diǎn)后部分不能超過38
UPDATE tb_datatype
SET decimalcol= CONCAT(REPEAT(9,27),’.’,REPEAT(9,39))
WHERE id = 1
> 1264 – Out of range value for column ‘decimalcol’ at row 1
> 時間: 0s
— #2.4 小數(shù)點(diǎn)后部分最大到38
UPDATE tb_datatype
SET decimalcol= CONCAT(REPEAT(9,27),’.’,REPEAT(9,38))
WHERE id = 1
> Affected rows: 0
> 時間: 0s
— # 2.5 查看結(jié)果
SELECT decimalcol
FROM tb_datatype WHERE id=1
延伸閱讀:
二、數(shù)據(jù)庫和 SQL 概念
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫,它的產(chǎn)生距今已有六十多年。隨著信息技術(shù)和市場的發(fā)展,數(shù)據(jù)庫變得無處不在:它在電子商務(wù)、銀行系統(tǒng)等眾多領(lǐng)域都被廣泛使用,且成為其系統(tǒng)的重要組成部分。
數(shù)據(jù)庫用于記錄數(shù)據(jù),使用數(shù)據(jù)庫記錄數(shù)據(jù)可以表現(xiàn)出各種數(shù)據(jù)間的聯(lián)系,也可以很方便地對所記錄的數(shù)據(jù)進(jìn)行增、刪、改、查等操作。
結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱 SQL,是上世紀(jì) 70 年代由 IBM 公司開發(fā),用于對數(shù)據(jù)庫進(jìn)行操作的語言。更詳細(xì)地說,SQL 是一種數(shù)據(jù)庫查詢和程序設(shè)計(jì)語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng),同時也是數(shù)據(jù)庫腳本文件的擴(kuò)展名。