1. Introduction
MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ที่ได้รับความนิยมอย่างกว้างขวางในหลายแอปพลิเคชันเว็บและระบบฐานข้อมูลต่าง ๆ ในประเภทข้อมูลของมัน, ประเภท INT เป็นหนึ่งในประเภทที่ใช้บ่อยที่สุดสำหรับการจัดการค่าตัวเลข บทความนี้ให้คำอธิบายโดยละเอียดเกี่ยวกับประเภท INT ของ MySQL โดยเฉพาะเราจะสำรวจค่ามากสุดที่รองรับโดยประเภท INT และวิธีการใช้มันอย่างมีประสิทธิภาพ การอ่านบทความนี้จะทำให้คุณได้รับความรู้ที่จำเป็นในการใช้ประเภท INT ใน MySQL อย่างถูกต้อง
2. Basic Specifications of the INT Type
Maximum and Minimum Values of INT
ประเภท INT ของ MySQL ใช้พื้นที่จัดเก็บ 4 ไบต์ (32 บิต) และช่วงค่าที่สามารถเก็บได้มีดังนี้
- Signed (SIGNED) :
- ค่าต่ำสุด: -2,147,483,648
- ค่าสูงสุด: 2,147,483,647
- Unsigned (UNSIGNED) :
- ค่าต่ำสุด: 0
- ค่าสูงสุด: 4,294,967,295
Storage Size of INT
ประเภท INT จะใช้พื้นที่จัดเก็บ 4 ไบต์เสมอ ขนาดนี้คงที่ไม่ว่าจะเก็บค่าขนาดใด ดังนั้นหากคุณไม่จำเป็นต้องจัดการช่วงตัวเลขที่ใหญ่มาก การเลือกใช้ประเภทข้อมูลที่เล็กลง (เช่น TINYINT หรือ SMALLINT) จะมีประสิทธิภาพมากกว่า
Use Cases for INT
ประเภท INT มักถูกใช้ในสถานการณ์ต่อไปนี้
- ค่าที่เพิ่มอัตโนมัติ (เช่น ID ของผู้ใช้, หมายเลขคำสั่งซื้อ)
- ข้อมูลจำนวนเต็มที่ใช้ในการคำนวณหรือการประมวลผลสถิติ (เช่น จำนวนสินค้าคงคลัง, จำนวนคลิก)
- ข้อมูลที่อยู่ในช่วงคงที่ (เช่น อายุหรือคะแนนการทดสอบ)
ในกรณีการใช้งานเหล่านี้ การพิจารณาช่วงค่าตัวเลขที่ต้องการและประสิทธิภาพการใช้หน่วยความจำเป็นสิ่งสำคัญ
3. What Does M Mean in INT(M)?
What Is Display Width (M)?
ใน MySQL, M ใน INT(M) หมายถึง “ความกว้างในการแสดงผล” ซึ่งไม่ได้มีผลต่อค่าตัวเลขจริงที่เก็บในฐานข้อมูล; แต่จะกำหนดรูปแบบการแสดงผลของค่า ตัวอย่างเช่น หากกำหนดเป็น INT(5) ตัวเลขจะถูกแสดงด้วยความกว้าง 5 หลัก
อย่างไรก็ตาม ความกว้างในการแสดงผล M มีความหมายเฉพาะในกรณีต่อไปนี้
- เมื่อเปิดใช้งานตัวเลือก ZEROFILL
- ตัวอย่าง: กับ
INT(5) ZEROFILLหากค่าคือ123จะถูกแสดงเป็น00123
Important Notes About ZEROFILL
เมื่อใช้ตัวเลือก ZEROFILL จะมีลักษณะต่อไปนี้
- เติมศูนย์นำหน้าโดยอัตโนมัติทางด้านซ้าย
- คุณลักษณะ
UNSIGNEDจะถูกเพิ่มโดยอัตโนมัติ
ดังนั้น หากคุณต้องการเก็บค่าติดลบ คุณไม่สามารถใช้ ZEROFILL ได้
Clearing Up Common Misunderstandings
ผู้เริ่มต้นหลายคนเข้าใจผิดว่า M จำกัดค่าที่สามารถเก็บได้สูงสุด อย่างไรก็ตาม M มีผลเพียงต่อรูปแบบการแสดงผลเท่านั้นและไม่มีผลต่อช่วงการจัดเก็บจริงแต่อย่างใด
4. Comparison with Other Integer Types
Types of Integer Data Types and Their Ranges
MySQL มีประเภทจำนวนเต็มต่อไปนี้:
| Type Name | Bytes | Signed Range | Unsigned Range |
|---|---|---|---|
| TINYINT | 1 byte | -128 to 127 | 0 to 255 |
| SMALLINT | 2 bytes | -32,768 to 32,767 | 0 to 65,535 |
| MEDIUMINT | 3 bytes | -8,388,608 to 8,388,607 | 0 to 16,777,215 |
| INT | 4 bytes | -2,147,483,648 to 2,147,483,647 | 0 to 4,294,967,295 |
| BIGINT | 8 bytes | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | 0 to 18,446,744,073,709,551,615 |
Selection Criteria
ใช้แนวทางต่อไปนี้เมื่อต้องเลือกประเภทข้อมูลที่เหมาะสมในการออกแบบฐานข้อมูล
- หากช่วงค่ามีขนาดเล็ก: ใช้
TINYINTหรือSMALLINTเพื่อประหยัดหน่วยความจำ - หากต้องการช่วงค่าที่ใหญ่มาก: ใช้
BIGINT - หากต้องการการใช้งานทั่วไป:
INTมักเป็นตัวเลือกที่เหมาะสมที่สุด
5. Changes Since MySQL 8.0.17
Deprecation of Display Width (M)
ตั้งแต่ MySQL 8.0.17 เป็นต้นมา “ความกว้างในการแสดงผล (M)” สำหรับประเภทจำนวนเต็มได้ถูกยกเลิกการใช้งาน การเปลี่ยนแปลงนี้มาพร้อมกับการยกเลิกตัวเลือก ZEROFILL และอาจถูกลบออกในเวอร์ชัน MySQL ในอนาคต
เหตุผลที่ทำให้ยกเลิกความกว้างในการแสดงผลมีดังนี้
- ทำให้เกิดความเข้าใจผิด * ผู้ใช้หลายคนเข้าใจผิดว่า
Mมีผลต่อค่าที่สามารถเก็บได้สูงสุดหรือจำนวนหลัก - การใช้งานจริงจำกัด * เนื่องจาก
Mควบคุมเพียงรูปแบบการแสดงผลเท่านั้น การจัดรูปแบบจึงมักทำที่ระดับแอปพลิเคชัน ทำให้ความจำเป็นลดลง
Deprecation of ZEROFILL
ตัวเลือก ZEROFILL 也被ยกเลิกการใช้งานในเวอร์ชันเดียวกันเช่นกัน แม้ว่า ZEROFILL จะสะดวกสำหรับการเติมศูนย์นำหน้าให้กับตัวเลข แต่ปัจจุบันไม่แนะนำให้ใช้ด้วยเหตุผลดังต่อไปนี้:
- วิธีทางเลือกที่แพร่หลาย:
- การเติมศูนย์นำหน้าสามารถจัดการได้ง่ายในชั้นของแอปพลิเคชันหรือชั้น UI
- หลีกเลี่ยงความสับสน:
- การใช้แอตทริบิวต์
UNSIGNEDโดยอัตโนมัติเมื่อใช้ZEROFILLทำให้ผู้ใช้เริ่มต้นสับสน
วิธีปรับตัวเข้ากับการยกเลิกการใช้งาน
เพื่อตอบสนองต่อการยกเลิกเหล่านี้ พิจารณาวิธีการต่อไปนี้ในการออกแบบฐานข้อมูล:
- จัดการการจัดรูปแบบในชั้นของแอปพลิเคชัน:
- ทำการเติมศูนย์นำหน้าและการจัดรูปแบบในชั้นของแอปพลิเคชันหรือชั้นนำเสนอ
- ตัวอย่าง: นำการเติมศูนย์นำหน้าไปใช้โดยใช้ PHP หรือ JavaScript
- นำการออกแบบที่ไม่พึ่งพากว้างของการแสดงผล:
- กำหนดประเภท
INTโดยไม่ระบุMและมุ่งเน้นที่ความถูกต้องของข้อมูลมากกว่าการจัดรูปแบบการแสดงผล
6. ส่วนคำถามที่พบบ่อยเชิงปฏิบัติ
คำถามที่พบบ่อย
Q1. จะเกิดอะไรขึ้นหากฉันเก็บค่าที่เกินขีดจำกัดสูงสุดของประเภท INT?
A. ใน MySQL การพยายามเก็บค่าที่อยู่นอกช่วงของประเภท INT จะทำให้เกิดข้อผิดพลาด คุณต้องเลือกค่าที่อยู่ในช่วงที่รองรับหรือเปลี่ยนไปใช้ประเภทข้อมูลที่มีช่วงใหญ่กว่า (ตัวอย่างเช่น BIGINT)。
Q2. INT และ BIGINT ต่างกันอย่างไร?
A. ประเภท BIGINT ใช้พื้นที่จัดเก็บสองเท่าของ INT (8 ไบต์) และให้ช่วงตัวเลขที่กว้างกว่ามาก ตัวอย่างเช่น ช่วงแบบมีเครื่องหมายของ BIGINT เกิน ±9 ล้านล้านล้าน ทำให้เหมาะสำหรับการจัดการชุดข้อมูลขนาดใหญ่มาก。
Q3. หลังจาก ZEROFILL ถูกยกเลิก ฉันควรนำการแสดงผลที่เติมศูนย์นำหน้าอย่างไร?
A. แนะนำให้จัดการการเติมศูนย์นำหน้าในชั้นของแอปพลิเคชัน ตัวอย่างเช่น ใน PHP คุณสามารถใช้ฟังก์ชัน str_pad() และใน JavaScript คุณสามารถใช้เมธอด padStart() เพื่อนำการเติมศูนย์นำหน้าไปใช้。
Q4. ฉันควรเลือก INT หรือประเภทจำนวนเต็มอื่นอย่างไร?
A. เลือกประเภทตามช่วงข้อมูล ค่าตัวเลขขนาดเล็ก (ตัวอย่างเช่น อายุหรือคะแนน) เหมาะสำหรับ TINYINT ข้อมูลขนาดกลาง (ตัวอย่างเช่น ID ผู้ใช้) เหมาะสำหรับ INT และค่าขนาดใหญ่มาก (ตัวอย่างเช่น ข้อมูลธุรกรรมทางการเงิน) เหมาะสำหรับ BIGINT。
7. สรุป
ในบทความนี้ เราอธิบายรายละเอียดเกี่ยวกับประเภทข้อมูล INT ของ MySQL คำสำคัญมีดังนี้:
- การเข้าใจความแตกต่างระหว่างค่าต่ำสุดและสูงสุดแบบมีเครื่องหมายและไม่มีเครื่องหมายของประเภท
INTเป็นพื้นฐานของการออกแบบข้อมูลที่เหมาะสม - สำคัญที่จะเข้าใจวิธีทางเลือกสำหรับตัวเลือก “display width (M)” และ “ZEROFILL” ที่ถูกยกเลิก และออกแบบฐานข้อมูลที่สามารถปรับตัวเข้ากับการอัปเดต MySQL ในอนาคต
- เลือกประเภทจำนวนเต็มที่เหมาะสมตามลักษณะข้อมูลเพื่อสร้างฐานข้อมูลที่มีประสิทธิภาพและบำรุงรักษาได้
ใช้บทความนี้เป็นแนวทางในการปรับปรุงการใช้ประเภท INT ของคุณและปรับปรุงประสิทธิภาพเพิ่มเติมในการออกแบบฐานข้อมูล MySQL


