สวัสดีครับทุกท่านที่แวะมาเยี่ยมชม
วันนี้เรามาเรียนรู้เรื่อง MySQL Data Type กันว่ามีอะไรบ้างและแต่ละอย่างแตกต่างกันอย่างไร เพื่อที่จะได้เลือก Data Type [ชนิดของข้อมูล] ได้อย่างถูกต้องและเหมาะสมเวลาที่เราทำการออกแบบฐานข้อมูลครับ
บทความชิ้นนี้เขียนขึ้นมาเพราะต้องทำการบ้านส่งอาจารย์ครับ 555+ ก็เลยรวบรวมเอาข้อมูลจากหลาย ๆ เว็บมาปรับปรุงขึ้นใหม่ พร้อมแล้วเราไปดูกันเลยครับว่า Data Type ใน MySQL นั้นมีอะไรบ้าง
Data Type ใน MySQL เราแบ่งหลักๆได้เป็น 3 ประเภท คือ
- Numeric เอาไว้จัดเก็บตัวเลข
- Date and Time เอาไว้จัดเก็บ วัน , เวลา
- String เอาไว้จัดเก็บ ตัวหนังสือ ตัวอักษรต่างๆ
ประเภท Numeric มีดังนี้
Type | คำอธิบาย | ขนาดพื้นที่ |
TINYINT(M) | สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม signed คือ -128 ถึง 127 unsigned คือ 0 ถึง 255 | 1 bytes |
SMALLINT(M) | สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม signed คือ -32768 ถึง 32767 unsigned คือ 0 ถึง 65535 | 2 bytes |
MEDIUMINT(M) | สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม signed คือ -8388608 ถึง 8388607 unsigned คือ 0 ถึง 16777215 | 3 bytes |
INT(M) | สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม signed คือ -2147483648 ถึง 2147483647 unsigned คือ 0 ถึง 4294967295 | 4 bytes |
BIGINT(M) | สำหรับเก็บข้อมูลชนิดตัวเลข จำนวนเต็มไม่มีทศนิยม signed คือ -9223372036854775808 ถึง 9223372036854775807 unsigned คือ 0 ถึง 18446744073709551615 | 8 bytes |
FLOAT(M,D) | สำหรับเก็บข้อมูลชนิดตัวเลขมีทศนิยม signed คือ -3.402823466E+38 ถึง -1.175494351E-38, 0 unsigned คือ 1.175494351E-38 ถึง 3.402823466E+38 | 4 bytes |
DOUBLE(M,D) | สำหรับเก็บข้อมูลชนิดตัวเลขมีทศนิยม signed คือ -1.7976931348623157E+308 ถึง -2.2250738585072014E-308, 0 unsigned คือ 2.2250738585072014E-308 ถึง 1.7976931348623157E+308 | 8 bytes |
DECIMAL(M,D) | เปลี่ยนแปลงได้ ขึ้นอยู่กับความยาวของตัวเลข (M) ค่าที่ระบุจำนวนตัวเลขที่ต้องการเก็บ เช่น (M) คือ 30 ก็เก็บเลขได้ 30 หลัก (ตั้งแต่ MySQL 5.0.3) สูงสุดที่ 30 หลัก | (M+7)/8 |
BIT (M) | ใส่ค่า bit ใส่ได้ ตั้งแต่ 1 ถึง 64 (ตั้งแต่ MySQL 5.0.3) |
สำหรับค่าตัวเลขสามารถกำหนดความยาวของตัวเลขและจำนวนหลังจุดทศนิยมได้ ขึ้นอยู่กับเป็นข้อมูลชนิดใด ในที่นี้จะแทนด้วยตัว
M คือ ค่าความยาวของตัวเลขรวมจุดทศนิยม
D คือ จำนวนตัวเลขหลังจุดทศนิยม
- unsigned คือ ไม่ติดลบ หรือไม่มีเครื่องหมาย
- unsigned zerofill คือ ไม่ติดลบ แต่ว่าหากข้อมูลที่กรอกเข้ามาไม่ครบตามจำนวน หลักที่เรากำหนด ตัว MySQL จะทำการเติม 0 ให้ครบหลักเอง เช่น ถ้ากำหนดให้ใส่ได้ 3 หลัก แล้วทำการเก็บข้อมูล 25 เข้าไป เวลาที่สืบค้นดู เราจะได้ค่าออกมาเป็น 025
- signed คือ ค่าติดลบ หรือมีเครื่องหมาย
ปกติที่เราสร้าง field จะถูกกำหนดเป็น signed โดยอัตโนมัติครับ
ประเภท Date and Time มีดังนี้
Type | คำอธิบาย | ขนาดพื้นที่ |
DATE | สำหรับเก็บข้อมูลประเภทวันที่ โดยเก็บได้จาก 1 มกราคม ค.ศ. 1000 ถึง 31 ธันวาคม ค.ศ. 9999 โดยจะแสดงผลในรูปแบบ YYYY-MM-DD | 3 bytes |
TIME | สำหรับเก็บข้อมูลประเภทเวลา มีค่าได้ตั้งแต่ -838:59:59 ไปจนถึง 838:59:59 โดยจะแสดงผล ออกมาในรูปแบบ HH:MM:SS | 3 bytes |
DATETIME | สำหรับเก็บข้อมูลประเภทวันที่ และเวลา โดยจะเก็บได้ตั้งแต่ 1 มกราคม ค.ศ. 1000 เวลา 00:00:00 ไปจนถึง 31 ธันวาคม ค.ศ. 9999 เวลา 23:59:59 โดยรูปแบบการแสดงผล เวลาที่ทำการสืบค้น (query) ออกมา จะเป็น YYYY-MM-DD HH:MM:SS | 8 bytes |
TIMESTAMP[(M)] | สำหรับเก็บข้อมูลประเภทวันที่ และเวลาเช่นกัน แต่จะเก็บในรูปแบบของ YYYYMMDDHHMMSS หรือ YMMDDHHMMSS หรือ YYYYMMDD หรือ YYMMDD แล้วแต่ ว่าจะระบุค่า M เป็น 14, 12, 8 หรือ 6 ตามลำดับ สามารถเก็บได้ตั้งแต่วันที่ 1 มกราคม ค.ศ. 1000 ไป จนถึงประมาณปี ค.ศ. 2037 | 4 bytes |
YEAR[(2|4)] | สำหรับเก็บข้อมูลประเภทปี ในรูปแบบ YYYY หรือ YY แล้วแต่ว่าจะเลือกโดยหากเลือกเป็น 4 หลัก จะเก็บค่าได้ตั้งแต่ ค.ศ. 1901 ถึง 2155 แต่ หากเป็น 2 หลัก จะเก็บตั้งแต่ ค.ศ. 1970 ถึง 2069 | 1 bytes |
ประเภท String มีดังนี้
Type | คำอธิบาย | ขนาดพื้นที่ |
CHAR(M) | สำหรับเก็บข้อมูลประเภทตัวอักษร ขนาดตามค่า M แต่ไม่เกิน 255 ตัวอักษร | M bytes |
VARCHAR(M) | สำหรับเก็บข้อมูลประเภทตัวอักษร ทุกครั้งที่เลือกชนิดของฟิลด์เป็นประเภทนี้ จะต้องมี การกำหนดความยาวของข้อมูลลงไปด้วย ซึ่งสามารถกำหนดค่าได้ตั้งแต่ 1 - 255 ฟิลด์ชนิดนี้ เหมาะ สำหรับการเก็บข้อมูลสั้นๆ เช่น ชื่อ นามสกุล (ตั้งแต่ MySQL เวอร์ชั่น 5.0.3 ขึ้นไปสามารถเก็บได้ 0 – 65,535 ตัวอักษร) | L+1 / L+2 bytes |
TINYTEXT | เป็น case-insensitive สามารถเก็บข้อมูล ได้ 255 ตัวอักษร | L+1 bytes |
TINYBLOB | เป็น case-sensitive สำหรับการเรียงและเปรียบเทียบ สามารถเก็บข้อมูล ได้ 255 ตัวอักษร | L+1 bytes |
TEXT | เป็น case-insensitive สำหรับเก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่สามารถเก็บได้มากขึ้น โดย สูงสุดคือ 65,535 ตัวอักษร เหมาะสำหรับเก็บข้อมูลพวกเนื้อหาต่างๆ ที่ยาวๆ | L+2 bytes |
BLOB | เป็น case-sensitive สำหรับการเรียงและเปรียบเทียบ สามารถเก็บข้อมูล ได้สูงสุดคือ 65,535 ตัวอักษร | L+2 bytes |
MEDIUMTEXT | เป็น case-insensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 16,777,215 ตัวอักษร | L+3 bytes |
MEDIUMBLOB | เป็น case-sensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 16,777,215 ตัวอักษร | L+3 bytes |
LONGTEXT | เป็น case-insensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 4,294,967,295 ตัวอักษร | L+4 bytes |
LONGBLOB | เป็น case-sensitive เก็บข้อมูลประเภทตัวอักษร เช่นเดียวกับ TINYTEXT แต่เก็บข้อมูลได้ 4,294,967,295 ตัวอักษร | L+4 bytes |
ENUM(‘value1’,’value2’,…) | เป็นการเก็บข้อมูลสตริงเข้าไว้เป็นรายการไว้ก่อน โดยค่าแรกถูกแทนด้วยค่า 1 หากรายการไม่ตรงกับรายการใดเลย จะแทนด้วยค่า 0 หรือจะใส่เป็นค่าตรงๆเลยก็ได้ ข้อมูลชนิดนี้จะช่วยลดพื้นที่การจัดเก็บได้อย่างมาก เหมาะกับการเลือกแบบลิสต์บ็อกซ์ เพราะเลือกได้เพียง 1 ตัวเลือกเท่านั้น ENUM เก็บค่ารายการได้สูงถึง 65535 ตัวเลือก | 1 – 2 bytes |
SET(‘value1’,’value2’,…) | คล้ายกับ ENUM แต่เลือกรายการได้มากกว่าหนึ่งตัวเลือก จะใช้เลขฐานสองเก็บค่าตัวเลือก โดยรายการแรกมีค่า 1, 2, 4, 8, 16, 32,... ไปเรื่อยๆ ถ้าเลือกรายการไหนก็เอามาบวกกันจะได้ค่าที่จะเก็บบันทึก เหมาะกับการเลือกแบบเช็คบ็อกซ์ เพื่อให้ผู้ตอบเลือกได้มากกว่า 1 ตัวเลือก SET เก็บค่ารายการได้เพียง 64 ตัวเลือก | 8 bytes |
BOOL | เหมือนกับ TINYINT แต่เก็บค่าเป็น 0 กับ 1 ซึ่ง 0 คือ เท็จ 1 คือ จริง | |
BINARY(M) | เหมือนกับชนิด CHAR แต่เก็บเป็นแบบ case-insensitive | M bytes |
VARBINARY(M) | เหมือนกับชนิด VARCHAR แต่เก็บเป็นแบบ case-insensitive | L+1 / L+2 bytes |
L คือ ตัวอักษรที่ใช้จริง
- case-sensitive คือ ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีความหมายแตกต่างกัน
- case-insensitive คือ ไม่คำนึงถึงตัวอักษรตัวพิมพ์ใหญ่หรือพิมพ์เล็ก
แหล่งอ้างอิง
- http://www.webub.com/ชนิดข้อมูลใน_MySQL__Datatype_-448-16.html
- http://www.stepcoding.com/new/PHP/ฟังก์ชัน%20MySQL%20ใน%20PHP/MySQL%20Data%20Types/10-13-131.html
- http://kittiphong-s.cms.psu.ac.th/index.php/-mysql/133-ตารางของชนิดข้อมูล-(Data-Type).html
- http://meewebfree.com/site/start-website-builder/252-mysql-datatype-datafield-mysql5
- http://www.thaiall.com/mysql/indexo.html
- http://dev.mysql.com/doc/refman/5.0/en/data-types.html
ไม่มีความคิดเห็น:
แสดงความคิดเห็น