อธิบายประเภทข้อมูล INT ของ MySQL: ค่าสูงสุด, ช่วงค่า, ขนาดการจัดเก็บ และการเปลี่ยนแปลงที่เลิกใช้ (MySQL 8+)

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 จะมีลักษณะต่อไปนี้

  1. เติมศูนย์นำหน้าโดยอัตโนมัติทางด้านซ้าย
  2. คุณลักษณะ UNSIGNED จะถูกเพิ่มโดยอัตโนมัติ

ดังนั้น หากคุณต้องการเก็บค่าติดลบ คุณไม่สามารถใช้ ZEROFILL ได้

Clearing Up Common Misunderstandings

ผู้เริ่มต้นหลายคนเข้าใจผิดว่า M จำกัดค่าที่สามารถเก็บได้สูงสุด อย่างไรก็ตาม M มีผลเพียงต่อรูปแบบการแสดงผลเท่านั้นและไม่มีผลต่อช่วงการจัดเก็บจริงแต่อย่างใด

4. Comparison with Other Integer Types

Types of Integer Data Types and Their Ranges

MySQL มีประเภทจำนวนเต็มต่อไปนี้:

Type NameBytesSigned RangeUnsigned Range
TINYINT1 byte-128 to 1270 to 255
SMALLINT2 bytes-32,768 to 32,7670 to 65,535
MEDIUMINT3 bytes-8,388,608 to 8,388,6070 to 16,777,215
INT4 bytes-2,147,483,648 to 2,147,483,6470 to 4,294,967,295
BIGINT8 bytes-9,223,372,036,854,775,808 to 9,223,372,036,854,775,8070 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 ในอนาคต

เหตุผลที่ทำให้ยกเลิกความกว้างในการแสดงผลมีดังนี้

  1. ทำให้เกิดความเข้าใจผิด * ผู้ใช้หลายคนเข้าใจผิดว่า M มีผลต่อค่าที่สามารถเก็บได้สูงสุดหรือจำนวนหลัก
  2. การใช้งานจริงจำกัด * เนื่องจาก M ควบคุมเพียงรูปแบบการแสดงผลเท่านั้น การจัดรูปแบบจึงมักทำที่ระดับแอปพลิเคชัน ทำให้ความจำเป็นลดลง

Deprecation of ZEROFILL

ตัวเลือก ZEROFILL 也被ยกเลิกการใช้งานในเวอร์ชันเดียวกันเช่นกัน แม้ว่า ZEROFILL จะสะดวกสำหรับการเติมศูนย์นำหน้าให้กับตัวเลข แต่ปัจจุบันไม่แนะนำให้ใช้ด้วยเหตุผลดังต่อไปนี้:

  • วิธีทางเลือกที่แพร่หลาย:
  • การเติมศูนย์นำหน้าสามารถจัดการได้ง่ายในชั้นของแอปพลิเคชันหรือชั้น UI
  • หลีกเลี่ยงความสับสน:
  • การใช้แอตทริบิวต์ UNSIGNED โดยอัตโนมัติเมื่อใช้ ZEROFILL ทำให้ผู้ใช้เริ่มต้นสับสน

วิธีปรับตัวเข้ากับการยกเลิกการใช้งาน

เพื่อตอบสนองต่อการยกเลิกเหล่านี้ พิจารณาวิธีการต่อไปนี้ในการออกแบบฐานข้อมูล:

  1. จัดการการจัดรูปแบบในชั้นของแอปพลิเคชัน:
  • ทำการเติมศูนย์นำหน้าและการจัดรูปแบบในชั้นของแอปพลิเคชันหรือชั้นนำเสนอ
  • ตัวอย่าง: นำการเติมศูนย์นำหน้าไปใช้โดยใช้ PHP หรือ JavaScript
  1. นำการออกแบบที่ไม่พึ่งพากว้างของการแสดงผล:
  • กำหนดประเภท 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