อะไรคือความแตกต่างระหว่างจิ๋วจิ้นเล็กจิ้นทินทินทินท์อินใหญ่และ int ใน MySQL?
ควรใช้สิ่งเหล่านี้ในกรณีใด
อะไรคือความแตกต่างระหว่างจิ๋วจิ้นเล็กจิ้นทินทินทินท์อินใหญ่และ int ใน MySQL?
ควรใช้สิ่งเหล่านี้ในกรณีใด
คำตอบ:
พวกเขาใช้พื้นที่ในปริมาณที่แตกต่างกันและมีช่วงของค่าที่ยอมรับได้แตกต่างกัน
นี่คือขนาดและช่วงของค่าสำหรับ SQL Server , RDBMS อื่น ๆ มีเอกสารที่คล้ายกัน:
ปรากฎว่าพวกเขาทุกคนใช้สเปคเดียวกัน (ยกเว้นข้อยกเว้นเล็กน้อยที่ระบุไว้ด้านล่าง) แต่สนับสนุนชุดค่าผสมต่าง ๆ ของประเภทเหล่านั้น (ไม่รวม Oracle เนื่องจากมีเพียงNUMBER
ประเภทข้อมูลให้ดูที่ลิงค์ด้านบน):
| SQL Server MySQL Postgres DB2
---------------------------------------------------
tinyint | X X
smallint | X X X X
mediumint | X
int/integer | X X X X
bigint | X X X X
และรองรับช่วงค่าเดียวกัน (โดยมีข้อยกเว้นหนึ่งข้อด้านล่าง) และทั้งหมดมีข้อกำหนดด้านพื้นที่เก็บข้อมูลเหมือนกัน:
| Bytes Range (signed) Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint | 1 byte -128 to 127 0 to 255
smallint | 2 bytes -32768 to 32767 0 to 65535
mediumint | 3 bytes -8388608 to 8388607 0 to 16777215
int/integer | 4 bytes -2147483648 to 2147483647 0 to 4294967295
bigint | 8 bytes -9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
ประเภท "unsigned" นั้นมีเฉพาะใน MySQL และส่วนที่เหลือก็ใช้ช่วงที่มีการเซ็นชื่อด้วยข้อยกเว้นที่น่าสังเกตหนึ่งประการ: tinyint
ใน SQL Server นั้นไม่ได้ลงนามและมีช่วงค่าตั้งแต่ 0 ถึง 255
ขนาดของพื้นที่เก็บข้อมูลที่ต้องการและขนาดของตัวเลขสามารถเป็นเท่าใด
บน SQL Server
tinyint 1 ไบต์, 0 ถึง 255
smallint 2 ไบต์, -2 ^ 15 (-32,768) ถึง 2 ^ 15-1 (32,767)
int 4 ไบต์, -2 ^ 31 (-2,147,483,648) ถึง 2 ^ 31-1 (2,147,483,647)
bigint 8 ไบต์, -2 ^ 63 (-9,223,372,036,854,775,808) ถึง 2 ^ 63-1 (9,223,372,036,854,775,807)
คุณสามารถจัดเก็บหมายเลข 1 ในทั้ง 4 แต่ bigint จะใช้ 8 ไบต์ในขณะที่ smallint จะใช้ 1 ไบต์
ดูเหมือนจะเป็นชนิดข้อมูล MySQL
ตามเอกสารที่ใช้:
และยอมรับจำนวนช่วงที่กว้างขึ้น
เมื่อได้รับการใช้งานจริงของประเภทข้อมูลเหล่านี้เป็นสิ่งสำคัญมากที่คุณเข้าใจว่าการใช้จำนวนเต็มบางประเภทอาจเป็นการ overkill หรือภายใต้การใช้งาน ตัวอย่างเช่นการใช้ประเภทข้อมูลจำนวนเต็มสำหรับ employeeCount ในตารางบอกว่าพนักงานอาจ overkill เนื่องจากสนับสนุนช่วงของค่าจำนวนเต็มตั้งแต่ ~ ลบ 2 พันล้านถึงบวก 2 พันล้านหรือศูนย์ถึงประมาณ 4 พันล้าน (ไม่ได้ลงนาม) ดังนั้นแม้ว่าคุณจะพิจารณาหนึ่งในนายจ้างที่ใหญ่ที่สุดในสหรัฐเช่น Walmart ที่มีพนักงานประมาณ 2.2 ล้านคนที่ใช้ประเภทข้อมูลจำนวนเต็มสำหรับคอลัมน์ employeeCount จะไม่จำเป็น ในกรณีเช่นนี้คุณใช้สื่อกลาง (ที่รองรับตั้งแต่ 0 ถึง 16 ล้าน (ไม่ได้ลงนาม)) ต้องบอกว่าถ้าช่วงของคุณคาดว่าจะมีขนาดใหญ่ผิดปกติคุณอาจพิจารณาใหญ่ที่คุณสามารถดูได้จากแดเนียล
ความแตกต่างคือจำนวนหน่วยความจำที่จัดสรรให้กับแต่ละจำนวนเต็มและจำนวนหน่วยความจำที่แต่ละหน่วยสามารถจัดเก็บได้
ชนิดข้อมูล Range Storage
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte
ตัวอย่าง
ตัวอย่างต่อไปนี้สร้างตารางโดยใช้ชนิดข้อมูล bigint, int, smallint และ tinyint ค่าจะถูกแทรกลงในแต่ละคอลัมน์และส่งคืนในคำสั่ง SELECT
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;