ชนิดข้อมูลใน MySQL
DATETIME : เป็นฟิลด์ชนิดที่เหมาะสมกับการเก็บข้อมูลวันที่ และเวลา โดยจะเก็บได้ตั้งแต่ 1 มกราคม ค.ศ. 1000 เวลา 00:00:00 ไปจนถึง 31 ธันวาคม ค.ศ. 9999 เวลา 23:59:59 ครับ โดยรูปแบบการแสดงผล เวลาที่ทำการสืบค้น (query) ออกมา จะเป็น YYYY-MM-DD HH:MM:SS
TIMESTAMP[(M)] : เอาไว้เก็บเวลา แต่จะเก็บในรูปแบบของ YYYYMMDDHHMMSS หรือ YYMMDDHHMMSS
หรือ YYYYMMDD หรือ YYMMDD แล้วแต่ว่าเราจะระบุค่า M เป็น 14, 12, 8 หรือ 6 ตามลำดับ เราสามารถเก็บได้ตั้งแต่วันที่
1 มกราคม ค.ศ. 1000 ไปจนถึงแถวๆ ปี ค.ศ. 2037 ครับ
TIME : เอาไว้เก็บเวลา มีค่าได้ตั้งแต่ -838:59:59 ไปจนถึง 838:59:59 โดยจะแสดงผลออกมาในรูปแบบ HH:MM:SS YEAR[(2/4)] : คือเอาไว้เก็บปี ในรูปแบบ YYYY หรือ YY แล้วแต่ว่าจะเลือก 2 หรือ 4 (หากไม่ระบุ จะถือว่าเป็น 4 หลัก) โดยหากเลือกเป็น
4 หลัก จะเก็บค่าได้ตั้งแต่ ค.ศ. 1901 ถึง 2155 แต่หากเป็น 2 หลัก จะเก็บตั้งแต่ ค.ศ.
1970 ถึง 2069 ข้อสังเกต มีข้อสังเกตเกี่ยวกับฟิลด์ชนิด TIMESTAMP และ YEAR นั่นก็คือ
ค่าที่เก็บในฟิลด์ชนิด TIMESTAMP นั้นจะมีความสามารถพอๆ กับ การเก็บข้อมูลวัน เดือนปี
และเวลา ด้วยฟิลด์ชนิด VARCHAR แต่ต่างกันตรงที่ จะใช้เนื้อที่เก็บข้อมูลน้อย กว่า ทว่า ฟิลด์ประเภท TIMESTAMP นั้นจะมีข้อจำกัดในเรื่องของเวลาที่สามารถเก็บ ได้
คือจะต้องอยู่ในระหว่าง 1 มกราคม ค.ศ. 1000 ไปจนถึงแถวๆ ค.ศ. 2037 แต่หากเก็บ เป็น
VARCHAR นั้นจะไม่ติดข้อจำกัดนี้
ฟิลด์ชนิด YEAR ก็เช่นกัน ใช้เนื้อที่แค่ 1 ไบต์เท่านั้นในการเก็บข้อมูล
แต่ข้อจำกัดจะอยู่ ที่ ปี ค.ศ. 1901 ถึง 2155 เท่านั้น (หรือ ค.ศ. 1970 ถึง 2069 ในกรณี
2 หลัก) แต่หากเก็บ เป็น VARCHAR จะได้ตั้งแต่ 0000 ถึง 9999
CHAR : เป็นข้อมูลประเภท
string แบบที่ถูกจำกัดความกว้างเอาไว้คือ 255 ตัวอักษร ไม่สามารถปรับเปลี่ยนได้เหมือนกับ
VARCHAR หากเราทำการสืบค้นโดยเรียงตามลำดับ มันก็จะเรียงข้อมูลแบบ
case-sensitive คือ คำนึงถึงตัวอักษรเล็ก และใหญ่ เว้นเสียแต่เราจะกำหนดแอตทริบิวต์เป็น
BINARY ที่จะทำให้การเรียงข้อมูลเป็นแบบ non
case-sensitive ครับ คือ ตัวอักษรใหญ่ และเล็ก มีค่าเท่ากัน
TINYBLOB : ฟิลด์ชนิด BLOB
นั้นจะมีไว้เพื่อเก็บข้อมูลประเภทไบนารี พูดง่ายๆ คือพวก ไฟล์ข้อมูลต่างๆ,
ไฟล์รูปภาพ, ไฟล์มัลติมีเดีย เป็นต้น คือไฟล์อะไรก็ตามที่อัพโหลดผ่านฟอร์มอัพโหลดไฟล์ในภาษา
HTML โดย TINYBLOB นั้นจะมีเนื้อที่ให้เก็บข้อมูลได้ 256 ไบต์
TINYTEXT : ในกรณีที่ข้อความยาวๆ
หรือต้องการที่จะค้นหาข้อความ โดยอาศัยฟีเจอร์ FULL TEXT SEARCH ของ MySQL เราอาจจะเลือกที่จะไม่เก็บข้อมูลลงในฟิลด์ประเภท VARCHAR ที่มีข้อจำกัดแค่
256 ตัวอักษร แต่เราจะเก็บลงฟิลด์ประเภท TEXT แทน TINYTEXT นี้ จะให้เราเก็บข้อมูลได้
256 ตัวอักษร ครับ ซึ่งมองเผินๆ ก็ไม่ต่างกับเก็บลงฟิลด์ประเภท CHAR หรือ VARCHAR(255) เลย แต่จริงๆ มันต่างกันตรงที่ มันทำ
FULL TEXT SEARCH ได้
BLOB : เหมือน TINYBLOB
ครับ แต่สามารถเก็บข้อมูลได้ 64KB
MEDIUMBLOB : เหมือน TINYBLOB
เช่นกัน แต่เก็บข้อมูลได้ 16MB
MEDIUMTEXT : เหมือน TEXT
ครับ แต่เก็บข้อมูลได้ 16,777,215 ตัวอักษร
LONGBLOB : เหมือน TINYBLOB
เช่นกัน แต่เก็บข้อมูลได้ 4GB
LONGTEXT : เหมือน TEXT
ครับ แต่เก็บข้อมูลได้ 4,294,967,295 ตัวอักษร
ข้อสังเกต
ฟิลด์ประเภท BLOB นั้น แม้จะมีประโยชน์ในเรื่องของการเก็บข้อมูลประเภท
BINARY ให้อยู่กับตัวฐานข้อมูล ทำให้สะดวกเวลาสืบค้นก็ตาม แต่มันก็ทำให้ฐานข้อมูลบวมเกินความจำเป็นด้วยครับ
ทำให้เกิดความไม่สะดวกในการสำรองฐานข้อมูลในกรณีที่ มีข้อมูลอัพโหลดไปเก็บมากๆ โดยปกติแล้ว
เราจะใช้วิธีการอัพโหลดไปเก็บไว้ในโฟลเดอร์ แล้วเก็บลิงก์ไปยังไฟล์เหล่านั้น เป็นฟิลด์ชนิด
VARCHAR มากกว่า
SMALLINT : เป็นฟิลด์สำหรับเก็บข้อมูลชนิดตัวเลขที่มีขนาดใหญ่ขึ้นมาอีกหน่อย คือ 16 บิต จึงสามารถเก็บค่าได้ตั้งแต่ -32768 ถึง 32767 (ในกรณีแบบคิดเครื่องหมาย)
หรือ 0 ถึง 65535 (ในกรณี UNSIGNED หรือไม่คิดเครื่องหมาย) สามารถเลือก Attribute เป็น UNSIGNED และ
UNSIGNED ZEROFILL ได้เช่นเดียวกับ TINYINT
MEDIUMINT : เช่นเดียวกับ
SMALLINT แต่จะมีขนาดใหญ่ขึ้นมาอีก ก็คือ 24 บิต นั่นก็หมายความว่าสามารถเก็บข้อมูลตัวเลขได้ตั้งแต่
-8388608 ไปจนถึง 8388607 (ในกรณีแบบคิดเครื่องหมาย) หรือ 0 ถึง 16777215 (ในกรณีที่เป็น
UNSIGNED หรือไม่คิดเครื่องหมาย) สามารถเลือก Attribute
เป็น UNSIGNED และ UNSIGNED ZEROFILL ได้เช่นเดียวกับ TINYINT
INT : เช่นเดียวกับ SMALLINT
เช่นกัน แต่จะเป็นขนาดปกติคือ 32 บิต หรือสามารถเก็บข้อมูลได้ตั้งแต่
-2147483648 ไปจนถึง 2147483647 (ในกรณีแบบคิดเครื่องหมาย) หรือ 0 ถึง
4294967295 (ในกรณีที่เป็น UNSIGNED หรือไม่คิดเครื่องหมาย) สามารถเลือก Attribute เป็น UNSIGNED และ
UNSIGNED ZEROFILL ได้เช่นเดียวกับ TINYINT
BIGINT : ในกรณีที่ต้องการเก็บค่าตัวเลขแบบเยอะสุดๆ
ก็ใช้นี่เลย เก็บข้อมูลแบบ 64 บิต สามารถเก็บข้อมูลได้ตั้งแต่
-9223372036854775808 ไปจนถึง 9223372036854775807 เลยทีเดียว (แบบคิดเครื่องหมาย)
หรือ 0 ถึง 18446744073709551615 (ในกรณีที่เป็น UNSIGNED หรือไม่คิดเครื่องหมาย) สามารถเลือก Attribute เป็น UNSIGNED และ UNSIGNED ZEROFILL ได้เช่นเดียวกับ TINYINT
FLOAT[(M,D)] : ที่กล่าวถึงไปทั้งหมด
ในตระกูล INT นั้นจะเป็นเลขจำนวนเต็ม หากเราบันทึกข้อมูลที่มีเศษทศนิยม
มันจะถูกปัดทันที ดังนั้นหากเราต้องการจะเก็บค่าที่เป็นเลขทศนิยม เราต้องเลือกชนิดของฟิลด์เป็น
FLOAT อันนี้จะเก็บข้อมูลแบบ 32 บิต คือมีค่าตั้งแต่
-3.402823466E+38 ไปจนถึง -1.175494351E-38, 0 และ 1.175494351E-38 ถึง
3.402823466E+38...
DOUBLE[(M,D)] : ในกรณีที่ต้องการเก็บเลขทศนิยมในระดับที่ละเอียดแบบสุดๆ
ไปเลย ก็ต้องเลือกชนิดนี้ เพราะจะเก็บข้อมูลแบบ 64 บิต สามารถเก็บได้ตั้งแต่ -1.7976931348623157E+308 ถึง -2.2250738585072014E-308, 0 และ 2.2250738585072014E-308 ถึง 1.7976931348623157E+308
DECIMAL[(M,D)] : เป็นข้อมูลชนิดตัวเลขแบบ unpacked คือ อนุญาตให้สามารถเก็บข้อมูลตัวอักษรเข้าไปได้
มีข้อสังเกตนิดนึง เกี่ยวกับข้อมูลชนิด
FLOAT, DOUBLE และ DECIMAL ก็คือ
เวลากำหนดความยาวของข้อมูลในฟิลด์
เราจะกำหนดในรูปแบบ (M,D) ซึ่ง หมายความว่า เราต้องระบุด้วยว่า
จะให้มีตัวเลขส่วนที่เป็นจำนวนเต็มกี่หลัก และมีเลขทศนิยมกี่หลัก เช่น ถ้าเรากำหนดว่า
FLOAT(5,2) จะหมายความว่า เราจะเก็บข้อมูลเป็นตัวเลขจำนวนเต็ม
5 หลัก และทศนิยม 2 หลัก ดังนั้นหากเราใส่ข้อมูล 12345.6789 เข้าไป สิ่งที่จะเข้าไปอยู่ในข้อมูลจริงๆ
ก็คือ 12345.68 ครับ (ปัดเศษให้มีจำนวนหลักตามที่เรากำหนด)
VARCHAR : เอาไว้เก็บข้อมูลประเภทตัวอักษร ทุกครั้งที่เลือกชนิดของฟิลด์เป็นประเภทนี้ จะต้องมีการกำหนดความยาวของข้อมูลลงไปด้วย
ซึ่งสามารถกำหนดได้ตั้งแต่ 1 - 255 . ฟิลด์ชนิดนี้ เหมาะสำหรับการเก็บข้อมูลสั้นๆ
เช่น ชื่อ นามสกุล หรือหัวข้อต่างๆ เป็นต้น ในส่วนฟิลด์ประเภทนี้ จะสามารถเลือก
"แอตทริบิวต์" เป็น BINARY ได้ ปกติแล้วการจัดเรียงข้อมูลเวลาสืบค้น
(query) สำหรับ VARCHAR จะเป็นแบบ case-sensitive
(ตัวอักษรใหญ่ และเล็กมีความหมายแตกต่างกัน) แต่หากระบุ "แอตทริบิวต์"
เป็น BINARY การสืบค้นจะไม่คำนึงตัวอักษรว่าจะเป็นตัวใหญ่
หรือตัวเล็ก
TINYINT : ข้อมูลประเภทตัวเลข แต่มีขนาดสูงสุดได้แค่ 8 บิต ข้อมูลประเภทนี้เราสามารถกำหนดเพิ่มเติมในส่วนของ
"แอตทริบิวต์" ได้ว่าจะเลือกเป็น UNSIGNED หรือ UNSIGNED
ZEROFILL โดยจะมีความแตกต่างดังนี้
UNSIGNED : จะหมายถึงเก็บค่าตัวเลขแบบไม่มีเครื่องหมาย ทำให้สามารถเก็บค่าได้ตั้งแต่
0 - 255
UNSIGNED ZEROFILL : เหมือนข้างต้น แต่ว่าหากข้อมูลที่กรอกเข้ามาไม่ครบตามจำนวนหลักที่เรากำหนด ตัว MySQL จะทำการเติม 0 ให้ครบหลักเองครับ เช่นเรากำหนดให้ใส่ได้ 3 หลัก แล้วเราเก็บข้อมูล
25 เข้าไป เวลาเราสืบค้นดู เราจะได้ค่าออกมาเป็น 025 หากเราไม่เลือก "แอตทริบิวต์"
สิ่งที่เราจะได้ก็คือ SIGNED ครับ นั่นก็คือต้องเสียบิตนึงไปเก็บเครื่องหมาย
บวก/ลบ ทำให้สามารถเก็บข้อมูลได้อยู่ในช่วง -128 ถึง 127 เท่านั้น
TEXT : เอาไว้เก็บข้อมูลประเภทตัวอักษร
แต่สามารถเก็บได้มากขึ้นครับ โดยสูงสุดคือ 65,535 ตัวอักษร หรือ 64KB นั่นเอง เหมาะสำหรับเก็บข้อมูลพวกเนื้อหาต่างๆ ที่ยาวๆ
DATE : เอาไว้เก็บข้อมูลประเภทวันที่
โดยเก็บได้จาก 1 มกราคม ค.ศ. 1000 ถึง 31 ธันวาคม ค.ศ. 9999 โดยจะแสดงผลในรูปแบบ YYYY-MM-DD
ไม่มีความคิดเห็น:
แสดงความคิดเห็น