Rumah  >  Artikel  >  pangkalan data  >  Apakah jenis yang digunakan mysql untuk perpuluhan?

Apakah jenis yang digunakan mysql untuk perpuluhan?

青灯夜游
青灯夜游asal
2021-12-01 16:41:0033425semak imbas

Jenis yang tersedia untuk perpuluhan mysql: 1. Jenis FLOAT, yang boleh menyimpan nombor titik terapung ketepatan tunggal 2. Jenis DOUBLE, yang boleh menyimpan nombor titik terapung berketepatan ganda 3. Jenis PERPULUHAN, digunakan untuk menyimpan nilai yang tepat, seperti perakaunan data Mata Wang dalam sistem.

Apakah jenis yang digunakan mysql untuk perpuluhan?

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

MySQL menggunakan nombor titik terapung dan nombor titik tetap untuk mewakili perpuluhan.

Terdapat dua jenis titik terapung, nombor titik terapung ketepatan tunggal (FLOAT) dan nombor titik terapung ketepatan dua (DOUBLE) hanya terdapat satu jenis titik tetap, iaitu PERPULUHAN.

Kedua-dua jenis titik terapung dan jenis titik tetap boleh diwakili oleh (M, D), di mana M dipanggil ketepatan, menunjukkan jumlah bilangan digit D dipanggil skala, menunjukkan bilangan digit perpuluhan .

Julat nilai jenis nombor titik terapung ialah M (1~255) dan D (1~30, dan tidak boleh lebih besar daripada M-2), yang masing-masing mewakili lebar paparan dan bilangan tempat perpuluhan. M dan D adalah pilihan dalam FLOAT dan DOUBLE, dan jenis FLOAT dan DOUBLE akan disimpan pada ketepatan maksimum yang disokong oleh perkakasan. Nilai D lalai untuk DECIMAL ialah 0 dan nilai M ialah 10.

Jadual berikut menyenaraikan jenis perpuluhan dan keperluan storan dalam MySQL.

Apakah jenis yang digunakan mysql untuk perpuluhan?

Jenis PERPULUHAN berbeza dengan FLOAT dan DOUBLE. DOUBLE sebenarnya disimpan dalam bentuk rentetan Julat nilai maksimum yang mungkin bagi DECIMAL adalah sama dengan DOUBLE, tetapi julat nilai berkesan ditentukan oleh M dan D. Jika M diubah dan D ditetapkan, julat nilai akan menjadi lebih besar apabila M menjadi lebih besar.

Seperti yang anda boleh lihat daripada jadual di atas, ruang storan PERPULUHAN tidak tetap, tetapi ditentukan oleh nilai kejituan M, yang menduduki M 2 bait.

Julat nilai jenis FLOAT adalah seperti berikut:

  • Julat nilai yang ditandatangani: -3.402823466E 38~-1.175494351E-38 .

  • Julat nilai yang tidak ditandatangani: 0 dan -1.175494351E-38~-3.402823466E 38.

Julat nilai jenis DOUBLE adalah seperti berikut:

  • Julat nilai yang ditandatangani: -1.7976931348623157E 308~ - 2.2250738585072014E-308.

  • Julat nilai yang tidak ditandatangani: 0 dan -2.2250738585072014E-308~-1.7976931348623157E 308.

Nota: Sama ada ia jenis titik tetap atau titik terapung, jika ketepatan yang ditentukan pengguna melebihi julat ketepatan, ia akan dibundarkan untuk diproses .

FLOAT dan DOUBLE akan lalai kepada ketepatan sebenar apabila ketepatan tidak ditentukan secara lalai kepada (10, 0) jika ketepatan tidak dinyatakan.

Kelebihan nombor titik terapung berbanding nombor titik tetap ialah ia boleh mewakili julat yang lebih besar apabila panjangnya malar ialah ia boleh menyebabkan masalah ketepatan.

Jenis PERPULUHAN

Jenis data DECIMAL digunakan untuk menyimpan nilai tepat dalam pangkalan data. Kami sering menggunakan jenis data DECIMAL untuk lajur yang mengekalkan ketepatan yang tepat, seperti data mata wang dalam sistem perakaunan.

Untuk mentakrifkan lajur dengan jenis data DECIMAL, gunakan sintaks berikut:

column_name  DECIMAL(P,D);

Dalam sintaks di atas:

  • P ialah Mewakili ketepatan bilangan digit bererti. Julat P ialah 1〜65.
  • D mewakili bilangan digit selepas titik perpuluhan. Julat D ialah 0~30. MySQL memerlukan D kurang daripada atau sama dengan ()<code>P.

DECIMAL(P,D) menunjukkan bahawa lajur boleh menyimpan D digit tempat perpuluhan. Julat sebenar lajur perpuluhan bergantung pada ketepatan dan skala. P

Seperti jenis data INT, jenis

juga mempunyai atribut DECIMAL dan UNSIGNED. Jika atribut ZEROFILL digunakan, lajur UNSIGNED tidak akan menerima nilai negatif. DECIMAL UNSIGNED

Jika

digunakan, MySQL akan memasukkan nilai paparan ke dalam ZEROFILL untuk memaparkan lebar yang ditentukan oleh definisi lajur. Selain itu, jika kita menggunakan 0 untuk lajur DECIMAL, MySQL akan secara automatik menambah atribut ZERO FILL pada lajur. UNSIGNED

Contoh berikut menggunakan

jenis data untuk menentukan lajur yang dipanggil DECIMAL. amount

amount DECIMAL(6,2);
Dalam contoh ini, lajur

boleh menyimpan sehingga amount digit dengan 6 tempat perpuluhan; oleh itu, lajur 2 berjulat dari amount hingga -9999.99. 9999.99

MySQL membenarkan sintaks berikut:

column_name DECIMAL(P);
Ini bersamaan dengan:

column_name DECIMAL(P,0);
Dalam kes ini, lajur tidak mengandungi bahagian perpuluhan atau titik perpuluhan .

Selain itu, kita juga boleh menggunakan sintaks berikut.

column_name DECIMAL;
Dalam kes ini, nilai lalai

ialah P. 10

Storan PERPULUHAN MySQL

MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储DECIMAL值。它将9位数字包装成4个字节。

对于每个部分,需要4个字节来存储9位数的每个倍数。剩余数字所需的存储如下表所示:

剩余数字
0 0
1–2 1
3–4 2
5–6 3
7-9 4

例如,DECIMAL(19,9)对于小数部分具有9位数字,对于整数部分具有19位= 10位数字,小数部分需要4个字节。 整数部分对于前9位数字需要4个字节,1个剩余字节需要1个字节。DECIMAL(19,9)列总共需要9个字节。

MySQL DECIMAL数据类型和货币数据

经常使用DECIMAL数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法 -

amount DECIMAL(19,2);

但是,如果您要遵守公认会计原则(GAAP)规则,则货币栏必须至少包含4位小数,以确保舍入值不超过$0.01。 在这种情况下,应该定义具有4位小数的列,如下所示:

amount DECIMAL(19,4);

MySQL DECIMAL数据类型示例

首先,创建一个名为test_order的新表,其中包含三列:iddescriptioncost

CREATE TABLE test_order (
    id INT AUTO_INCREMENT PRIMARY KEY,
    description VARCHAR(255),
    cost DECIMAL(19,4) NOT NULL
);

第二步,将资料插入test_order表。

INSERT INTO test_order(description,cost)
VALUES(&#39;Bicycle&#39;, 500.34),(&#39;Seat&#39;,10.23),(&#39;Break&#39;,5.21);

第三步,从test_order表查询数据。

SELECT * from test_order

第四步,更改cost列以包含ZEROFILL属性。

ALTER TABLE test_order
MODIFY cost DECIMAL(19,4) zerofill;

第五步,再次查询test_order表。

SELECT * from test_order

查询结果

 

如上所见,在输出值中填充了许多零。

因为zerofill,当我们插入负值会报错:

INSERT INTO test_order(description,cost)
VALUES(&#39;test&#39;, -100.11);
提示:
[SQL]INSERT INTO test_order(description,cost)
VALUES(&#39;test&#39;, -100.11)

[Err] 1264 - Out of range value for column &#39;cost&#39; at row 1

其它插入测试结论:

当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。

若数值在其取值范围之外,则直接报Out of range value错误。

【相关推荐:mysql视频教程

Atas ialah kandungan terperinci Apakah jenis yang digunakan mysql untuk perpuluhan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn