PostgreSQL ประเภทข้อมูล: ตัวเลข, อักขระ, ไบต์

⚡ สรุปอย่างชาญฉลาด

PostgreSQL ประเภทข้อมูลจะกำหนดชนิดของค่าที่แต่ละคอลัมน์สามารถจัดเก็บได้ โดยครอบคลุมหมวดหมู่ต่างๆ เช่น อักขระ ตัวเลข ไบนารี วันที่และเวลา บูลีน เรขาคณิต เครือข่าย UUID XML และ JSON PostgreSQL นอกจากนี้ยังช่วยให้ผู้ใช้สร้างประเภทที่กำหนดเองได้โดยใช้คำสั่ง CREATE TYPE

  • 🔤 ประเภทตัวละคร: ชนิดข้อมูล CHAR, VARCHAR และ TEXT ใช้สำหรับจัดเก็บค่าข้อความที่มีความยาวคงที่ ความยาวแปรผัน และความยาวไม่จำกัด
  • 🔢 ประเภทตัวเลข: ชนิดข้อมูลจำนวนเต็มและจำนวนทศนิยมมีตั้งแต่ smallint ถึง bigint รวมถึงค่าตัวเลขที่แน่นอนและค่าทศนิยมด้วย
  • 🕒 วันและเวลา: ประเภทการประทับเวลา วันที่ เวลา และช่วงเวลา ให้ความแม่นยำระดับไมโครวินาที พร้อมตัวเลือกโซนเวลา
  • บูลีนและเอนัม: ประเภทข้อมูลบูลีนมีค่าเป็นจริง เท็จ หรือว่างเปล่า ในขณะที่ประเภทข้อมูลแจงนับมีค่าคงที่ซึ่งเปลี่ยนแปลงได้ยาก
  • 🌐 ประเภทเฉพาะ: รูปแบบข้อมูลแบบเครือข่าย, เรขาคณิต, UUID, XML, JSON และ JSONB ใช้สำหรับจัดการที่อยู่ รูปร่าง ตัวระบุ และข้อมูลที่มีโครงสร้าง
  • 💡 ปฏิบัติที่ดีที่สุด: ควรใช้ TEXT สำหรับข้อความ และ NUMERIC สำหรับตัวเลข และสร้างประเภทข้อมูลแบบกำหนดเองเฉพาะเมื่อจำเป็นเท่านั้น

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

ประเภทข้อมูลใน PostgreSQL

PostgreSQL รองรับชนิดข้อมูลต่อไปนี้:

  • ประเภทข้อความ
  • ประเภทตัวเลข
  • วันที่และเวลา
  • XML
  • JSON
  • บูลีน
  • เกร็ด
  • ข้อมูลไบนารี
  • เครือข่าย
  • อาร์เรย์
  • สร้างประเภทข้อมูลของคุณ
  • ชั่วคราว
  • UUID
  • ชนิดข้อมูลพิเศษสำหรับจัดเก็บที่อยู่เครือข่ายและข้อมูลเชิงเรขาคณิต

มาเรียนกันเถอะ PostgreSQL ประเภทข้อมูลโดยละเอียด

ประเภทข้อมูลตัวละคร

PostgreSQL รองรับประเภทข้อมูลอักขระสำหรับจัดเก็บค่าข้อความ PostgreSQL สร้างชนิดข้อมูลอักขระจากโครงสร้างภายในเดียวกัน PostgreSQL มีประเภทข้อมูลอักขระสามประเภท: CHAR(n), VARCHAR(n) และ TEXT

ชื่อ Descriptไอออน
วาร์ชาร์(n) ช่วยให้คุณสามารถประกาศความยาวผันแปรได้โดยมีขีดจำกัด
ถ่าน(n) ความยาวคงที่ เบาะเปล่า
ข้อความ ใช้สามารถใช้ข้อมูลประเภทนี้ในการประกาศตัวแปรที่มีความยาวไม่จำกัด

ประเภทข้อมูลตัวเลข

PostgreSQL รองรับตัวเลขสองประเภทที่แตกต่างกัน:

  • จำนวนเต็ม
  • ตัวเลขจุดลอยตัว
ชื่อ ขนาดร้าน พิสัย
ขนาดเล็ก ไบต์ 2 -32768 to + 32767
จำนวนเต็ม ไบต์ 4 -2147483648 to + 2147483647
ใหญ่ ไบต์ 8 -9223372036854775808 ไป 9223372036854775807
ทศนิยม ตัวแปร หากประกาศเป็นประเภทข้อมูลทศนิยมจะมีตั้งแต่ 131072 หลักก่อนจุดทศนิยม ถึง 16383 หลักหลังจุดทศนิยม
เป็นตัวเลข ตัวแปร หากประกาศเป็นตัวเลขสามารถใส่ตัวเลขก่อนจุดทศนิยมได้ 131072 หลัก ถึง 16383 หลักหลังจุดทศนิยม
จริง ไบต์ 4 ความแม่นยำระดับทศนิยม 6 หลัก
สอง ไบต์ 8 ความแม่นยำระดับทศนิยม 15 หลัก

ประเภทข้อมูลไบนารี

สตริงไบนารี่คือลำดับของอ็อกเท็ตหรือไบต์ ประเภทข้อมูล Binary Postgres แบ่งออกเป็นสองวิธี

  • สตริงไบนารี่อนุญาตให้เก็บอัตราต่อรองของค่าศูนย์
  • ออคเต็ตที่ไม่สามารถพิมพ์ได้

สตริงอักขระไม่อนุญาตให้มีค่าออคเต็ตเป็นศูนย์ และยังไม่อนุญาตให้ใช้ค่าออคเต็ตและลำดับอื่นๆ ที่ไม่ถูกต้องตามกฎการเข้ารหัสชุดอักขระของฐานข้อมูล

ชื่อ ขนาดพื้นที่จัดเก็บ Descriptไอออน
byte 1 ถึง 4 ไบต์บวกขนาดของสตริงไบนารี่ สตริงไบนารี่ที่มีความยาวผันแปรได้

ประเภทที่อยู่เครือข่าย

แอปพลิเคชันจำนวนมากจัดเก็บข้อมูลเครือข่าย เช่น ที่อยู่ IP ของผู้ใช้หรือเซ็นเซอร์ PostgreSQL มีเนทิฟสามประเภทซึ่งช่วยให้คุณเพิ่มประสิทธิภาพข้อมูลเครือข่าย

ชื่อ ขนาด Descriptไอออน
มะนาว 7 หรือ 19 ไบต์ IPv4 และ IPv6 เครือข่าย
ผู้เคร่งครัดในวินัย 7 หรือ 19 ไบต์ โฮสต์และเครือข่าย IPv4 และ IPv6
แมคคาด ไบต์ 6 ที่อยู่ MAC

การใช้ประเภทที่อยู่เครือข่ายมีข้อดีดังต่อไปนี้

  1. ประหยัดพื้นที่จัดเก็บ
  2. การตรวจสอบข้อผิดพลาดอินพุต
  3. ฟังก์ชั่นเช่นการค้นหาข้อมูลตามซับเน็ต

ประเภทการค้นหาข้อความ

PostgreSQL มีประเภทข้อมูลสองประเภทที่ได้รับการออกแบบมาเพื่อรองรับการค้นหาข้อความแบบเต็ม การค้นหาข้อความแบบเต็มคือการค้นหาผ่านคอลเล็กชันเอกสารภาษาธรรมชาติเพื่อค้นหาเอกสารที่ตรงกับคำค้นหามากที่สุด

  • ค้นหาข้อความ Tsvector PostgreSQL ประเภทตัวแปรแสดงถึงเอกสารในรูปแบบที่ปรับให้เหมาะสมสำหรับการค้นหาข้อความ
  • การค้นหาข้อความประเภทข้อความค้นหาจะเก็บคำสำคัญที่ต้องการค้นหา

ประเภทข้อมูลวันที่/เวลา

PostgreSQL การประทับเวลาให้ความแม่นยำในระดับไมโครวินาทีแทนที่จะเป็นความแม่นยำระดับที่สอง นอกจากนี้คุณยังมีตัวเลือกในการจัดเก็บแบบมีเขตเวลาหรือไม่มีก็ได้ PostgreSQL จะแปลงการประทับเวลาด้วยเขตเวลาเป็น UTC ในอินพุตและจัดเก็บ

การป้อนข้อมูลวันที่และเวลาเป็นที่ยอมรับในรูปแบบต่างๆ รวมถึง Postgres แบบดั้งเดิม, ISO 8601 รองรับ SQL เป็นต้น

PostgreSQL รองรับการสั่งวัน/เดือน/ปี รูปแบบที่รองรับคือ DMY, MDY, YMD

ประเภทข้อมูลชั่วคราว

ชื่อ ขนาด พิสัย ความละเอียด
การประทับเวลาโดยไม่มีเขตเวลา ไบต์ 8 4713 ปีก่อนคริสตกาล ถึง ค.ศ. 294276 1 ไมโครวินาที/14 หลัก
การประทับเวลาด้วยเขตเวลา ไบต์ 8 4713 ปีก่อนคริสตกาล ถึง ค.ศ. 294276 1 ไมโครวินาที/14 หลัก
ข้อมูล ไบต์ 4 4713 ปีก่อนคริสตกาล ถึง ค.ศ. 294276 อยู่มาวันหนึ่ง
เวลาที่ไม่มีเขตเวลา ไบต์ 8 00:00:00 to 24:00:00 1 ไมโครวินาที/14 หลัก
เวลากับเขตเวลา ไบต์ 12 00:00:00 น. + 1459 ถึง 24:00:00-1459 1 ไมโครวินาที/14 หลัก
ระยะห่าง ไบต์ 12 -178000000 ถึง 178000000 ปี 1 ไมโครวินาที/14 หลัก

ตัวอย่าง

อินพุต Descriptไอออน
2025-09-07 ISO 8601 วันที่ 7 กันยายน พร้อมรูปแบบวันที่ใดก็ได้ (รูปแบบที่แนะนำ)
September 7, 2025 7 กันยายนกับสไตล์วันที่ใดก็ได้
9/7/2025 7 กันยายนกับ MDY 9 กรกฎาคมกับ DMY
9/7/25 7 กันยายน 2025 กับ MDY
2025-Sep-7 7 กันยายนกับสไตล์วันที่ใดก็ได้
7 ก.ย. 2018 7 กันยายนกับสไตล์วันที่ใดก็ได้
7-Sep-25 7 กันยายน 2025 กับ YMD
20250907 ISO 8601, 7 กันยายน 2025 ในทุกโหมด
2025.250 ปีและวันของปี ในกรณีนี้คือ 7 กันยายน 2025
J25250 จูเลียนเดท

เวลา/ เวลาพร้อมอินพุตโซนเวลา

อินพุต Descriptไอออน
11:19:38.507
11:19:38
11:19
111938
ISO.8601
11: 19 น เช่นเดียวกับ 11:19
11: 19 ส่วนตัว เช่นเดียวกับ 23:19
23: 19-3
23:19-03:00
231900-03
ISO 8601 เหมือนกับ 11:19 น. EST
23: 19 EST โซนเวลาที่ระบุเป็น EST เช่นเดียวกับ 11:19 น. EST

ประเภทบูลีน

ชนิดข้อมูลบูลีนสามารถเก็บได้

  • จริง
  • เท็จ
  • โมฆะ

ค่า

คุณใช้ a บูล or บูล คีย์เวิร์ดเพื่อประกาศคอลัมน์ที่มีชนิดข้อมูลบูลีน

เมื่อคุณแทรกค่าลงในคอลัมน์บูลีน Postgre จะแปลงค่าต่างๆ เช่น

  • มี (ใบกำกับภาษีเต็มรูปแบบ)
  • y
  • 1
  • t
  • จริง

เป็น 1

ในขณะที่คุณค่าเช่น

  • ไม่
  • N
  • 0
  • F
  • เท็จ

จะถูกแปลงเป็น 0

ขณะเลือกข้อมูล ค่าจะถูกแปลงกลับเป็นใช่ จริง y ฯลฯ อีกครั้ง

ประเภทข้อมูลเรขาคณิต

ประเภทข้อมูลทางเรขาคณิตแสดงถึงวัตถุเชิงพื้นที่สองมิติ ซึ่งช่วยในการดำเนินการต่างๆ เช่น การหมุน การปรับขนาด การแปล ฯลฯ

ชื่อ ขนาดการจัดเก็บ การเป็นตัวแทน Descriptไอออน
จุด ไบต์ 16 ชี้ไปที่เครื่องบิน (x,ย)
Line ไบต์ 32 เส้นอนันต์ ((xl.yl).(x2.y2))
แอลเซก ไบต์ 32 ส่วนของเส้นจำกัด ((xl.yl).(x2.y2))
Box ไบต์ 32 รูปสี่เหลี่ยมผืนผ้า Box ((xl.yl).(x2.y2))
เส้นทาง 16n + 16n ไบต์ ปิดและเปิดเส้นทาง ((xl.yl),…)
Polygon 40 + 16n ไบต์ Polygon [(xl.yl),….]
วงกลม ไบต์ 24 วงกลม <(xy).r> (จุดกึ่งกลางและรัศมี)

ประเภทที่แจงนับ

แจกแจง PostgreSQL ชนิดข้อมูลมีประโยชน์ในการแสดงข้อมูลที่ไม่ค่อยเปลี่ยนแปลง เช่น รหัสประเทศ หรือรหัสสาขา ประเภทข้อมูลที่แจกแจงจะแสดงในตารางที่มีคีย์นอกเพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์

ตัวอย่าง

สีผมค่อนข้างคงที่ในฐานข้อมูลประชากร

CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')

ประเภทที่แจงนับ

ประเภทช่วง

แอปพลิเคชันทางธุรกิจจำนวนมากต้องการข้อมูลในช่วง โดยทั่วไปแล้ว สองคอลัมน์ (ตัวอย่าง: วันที่เริ่มต้น, วันที่สิ้นสุด) ถูกกำหนดไว้เพื่อจัดการกับช่วง สิ่งนี้ไม่มีประสิทธิภาพและยากต่อการบำรุงรักษา

Postgre ได้สร้างประเภทช่วงดังต่อไปนี้

  • int4range - แสดงช่วงของจำนวนเต็ม
  • int8range - แสดงช่วงของ bigint
  • numrange - แสดงช่วงตัวเลข
  • tstrange — ช่วยให้คุณแสดงการประทับเวลาโดยไม่มีเขตเวลา
  • แปลก — ให้คุณแสดงการประทับเวลาพร้อมเขตเวลา
  • ช่วงวันที่ — ช่วงวันที่

ประเภท UUID

รหัสประจำตัวที่ไม่ซ้ำกันทั่วโลก (UUID) คือค่า 128 บิตที่สร้างขึ้นโดยอัลกอริทึม โอกาสที่บุคคลอื่นในโลกจะสร้างรหัสเดียวกันโดยใช้อัลกอริทึมเดียวกันนั้นมีน้อยมาก ด้วยเหตุนี้ รหัส UUID จึงเป็นตัวเลือกที่เหมาะสมสำหรับระบบแบบกระจาย เนื่องจากให้ความเป็นเอกลักษณ์ภายในฐานข้อมูลเดียว UUID เขียนเป็นกลุ่มตัวเลขฐานสิบหกตัวพิมพ์เล็ก โดยแต่ละกลุ่มคั่นด้วยเครื่องหมายขีดกลาง

PostgreSQL มีชนิดข้อมูล UUID ดั้งเดิมซึ่งใช้พื้นที่จัดเก็บ 16 ไบต์ UUID เป็นชนิดข้อมูลที่เหมาะสมอย่างยิ่งสำหรับคีย์หลัก

ตัวอย่าง

d5f28c97-b962-43be-9cf8-ca1632182e8e

Postgre ยังยอมรับรูปแบบอื่นของอินพุต UUID เช่น ตัวพิมพ์ใหญ่ทั้งหมด ไม่มีเครื่องหมายยัติภังค์ วงเล็บปีกกา ฯลฯ

ประเภท XML

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

ตัวอย่าง

XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')

ประเภท JSON

เพื่อจัดเก็บข้อมูล JSON PostgreSQL มีข้อมูล 2 ประเภท

  1. JSON
  2. เจสันบี
JSON เจสันบี
ส่วนขยายอย่างง่ายของประเภทข้อมูลข้อความพร้อมการตรวจสอบ JSON การแสดงไบนารีของข้อมูล JSON
การแทรกทำได้รวดเร็วแต่การดึงข้อมูลค่อนข้างช้า การแทรกช้าแต่เลือก (การดึงข้อมูลทำได้เร็ว)
บันทึกข้อมูลที่ป้อนในลักษณะเดียวกับการรวมช่องว่าง รองรับการจัดทำดัชนี อาจปรับช่องว่างให้เหมาะสมเพื่อให้ดึงข้อมูลได้เร็วขึ้น
การประมวลผลซ้ำในการดึงข้อมูล ไม่จำเป็นต้องมีการประมวลผลซ้ำในการดึงข้อมูล

ประเภทข้อมูล JSON ที่ใช้กันอย่างแพร่หลายส่วนใหญ่ใช้ us jsonb เว้นแต่จะมีความจำเป็นพิเศษบางประการในการใช้ประเภทข้อมูล JSON

ตัวอย่าง

CREATE TABLE employee (
  id integer NOT NULL,
  age  integer NOT NULL,
  data jsonb
);
INSERT INTO employee VALUES (1, 35, '{"name": "Tom Price", "tags": ["Motivated", "SelfLearner"], "onboarded": true}');

ประเภทหลอก

PostgreSQL มีรายการวัตถุประสงค์พิเศษมากมายที่เรียกว่าประเภทหลอก คุณไม่สามารถใช้ประเภทหลอกเป็นได้ PostgreSQL ประเภทคอลัมน์ ใช้ในการประกาศหรืออาร์กิวเมนต์ของฟังก์ชันหรือประเภทการส่งคืน

ประเภทหลอกที่มีอยู่แต่ละประเภทมีประโยชน์ในสถานการณ์ที่เอกสารลักษณะการทำงานของฟังก์ชันไม่สอดคล้องกับการรับหรือส่งคืนค่าเฉพาะ ชนิดข้อมูล SQL.

ชื่อ Descriptไอออน
ใด ฟังก์ชั่นยอมรับประเภทข้อมูลอินพุตทั้งหมด
อาร์เรย์ ฟังก์ชันยอมรับชนิดข้อมูลอาร์เรย์ใดๆ
องค์ประกอบใดๆ ฟังก์ชันยอมรับข้อมูลชนิดใดก็ได้
แจงนับใดๆ ฟังก์ชันยอมรับชนิดข้อมูลแจงนับใดๆ
ไม่อาร์เรย์ ฟังก์ชันยอมรับชนิดข้อมูลที่ไม่ใช่อาร์เรย์
ซีสตริง ฟังก์ชันยอมรับหรือส่งคืนสตริง C ที่สิ้นสุดด้วยค่า null
ภายใน ฟังก์ชันภายในยอมรับหรือส่งคืนชนิดข้อมูลภายในเซิร์ฟเวอร์
ภาษา_ตัวจัดการ มีการประกาศให้ส่งคืนตัวจัดการภาษา
บันทึก ค้นหาฟังก์ชันที่ส่งคืนประเภทแถวที่ไม่ระบุ
ทริกเกอร์ ฟังก์ชันทริกเกอร์ใช้เพื่อส่งคืนทริกเกอร์

สิ่งสำคัญคือผู้ใช้ที่ใช้ฟังก์ชันนี้ต้องแน่ใจว่าฟังก์ชันจะทำงานอย่างปลอดภัยเมื่อใช้ประเภทหลอกเป็นประเภทอาร์กิวเมนต์

แนวทางปฏิบัติที่ดีที่สุดโดยใช้ชนิดข้อมูล

  • ใช้ประเภทข้อมูล "ข้อความ" เว้นแต่คุณต้องการจำกัดอินพุต
  • ห้ามใช้ “ถ่าน”
  • จำนวนเต็มใช้ "int" ใช้ bigint เฉพาะเมื่อคุณมีตัวเลขที่ใหญ่จริงๆ เท่านั้น
  • ใช้ “ตัวเลข” เกือบทุกครั้ง
  • ใช้ลอยเข้า PostgreSQL หากคุณมีแหล่งข้อมูล IEEE 754

คำถามที่พบบ่อย

ตัวเลข (ทศนิยม) เก็บค่าที่แน่นอนและเหมาะสำหรับข้อมูลทางการเงินและการคำนวณที่ต้องการความแม่นยำสูง ส่วนตัวเลขทศนิยม (real และ double) เก็บค่าโดยประมาณ มีประสิทธิภาพการทำงานที่เร็วกว่า แต่มีข้อผิดพลาดจากการปัดเศษเล็กน้อย ดังนั้นควรหลีกเลี่ยงการใช้ตัวเลขประเภทนี้กับข้อมูลทางการเงินที่ต้องการความแม่นยำสูง

ใช่. PostgreSQL อนุญาตให้คอลัมน์ใดๆ ก็ได้จัดเก็บอาร์เรย์ของชนิดข้อมูลพื้นฐาน เช่น integer[] หรือ text[] อาร์เรย์มีประโยชน์สำหรับรายการค่าต่างๆ และสามารถค้นหา สร้างดัชนี และแยกย่อยในแบบสอบถามได้

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

AI สามารถตรวจสอบข้อมูลตัวอย่างของคุณและแนะนำประเภทข้อมูลที่เหมาะสม เช่น numeric สำหรับข้อมูลเงิน หรือ jsonb สำหรับฟิลด์ที่มีความยืดหยุ่น นอกจากนี้ยังอธิบายถึงข้อดีข้อเสียในด้านการจัดเก็บข้อมูล ความแม่นยำ และประสิทธิภาพ เพื่อให้คุณสามารถตัดสินใจได้อย่างมั่นใจ

ใช่ AI สามารถแปลงประเภทข้อมูลได้ MySQL, Oracleหรือ SQL Server ให้กับพวกเขา PostgreSQL ค่าเทียบเท่าและความไม่ตรงกันของแฟล็ก เช่น TINYINT หรือ NVARCHAR ช่วยได้ping คุณวางแผนการย้ายฐานข้อมูลให้ราบรื่นยิ่งขึ้น

สรุปโพสต์นี้ด้วย: