MySQL มีการสนับสนุนประเภทข้อมูลที่กำหนดเองหรือไม่? ตัวอย่างเช่นอาจมีการจัดเก็บรหัสไปรษณีย์ในvarchar(10)
เขตข้อมูล แต่สามารถย่อเป็นได้int
โดยมีตัวเลือกว่างเปล่าและตั้งค่าสถานะว่าเป็นรหัสไปรษณีย์ 5 หลักหรือ 5 + 4 หลัก
มีวิธีติดตั้งชนิดข้อมูลที่ไร้รอยต่อสำหรับสิ่งต่าง ๆ หรือไม่? เท่าที่แอปพลิเคชันเกี่ยวข้องมันจะเป็นประเภทสตริงจะมีการตัดทอนข้อมูล (โดยมีหรือไม่มีการเตือน) หากแอปพลิเคชันผ่านข้อมูลที่ไม่ถูกต้อง
สามารถใช้ฟังก์ชั่นที่กำหนดเองได้ (ตัวอย่างเช่นมีฟังก์ชั่นINET_ATON
บิวด์อินสำหรับที่อยู่ IPv4 แต่ไม่อนุญาตให้ทำสิ่งต่าง ๆzip LIKE '12345%'
ที่ควรทำดัชนีอย่างเหมาะสมการสนับสนุนที่เขียนอย่างดีสำหรับประเภทข้อมูลที่กำหนดเองจะอนุญาตให้ทำเครื่องหมายชนิดข้อมูล เป็นจัดเรียง. ดังนั้นขนาดกะทัดรัดเมื่อเรียงลำดับจะเรียงลำดับเช่นเดียวกับถ้ามันเป็นzip int
zip varchar(10)
สิ่งนี้จะทำให้คอลัมน์มีความกว้างคงที่มันจะอนุญาตให้มีการลดขนาดหน่วยเก็บข้อมูลตัวแปร 6 หรือ 10 ไบต์ลงเหลือ 4 ไบต์ของความกว้างคงที่
มีการใช้งานที่เกี่ยวข้องหลายอย่าง
- รหัสไปรษณีย์
- ที่อยู่ IPv6
- ฟิลด์การประทับเวลาที่กำหนดเองที่มีความแม่นยำระดับนาทีและความจุเกินกว่าที่
2038
มีการใช้พื้นที่เก็บข้อมูลน้อยกว่าdatetime
แต่ไม่จำเป็นต้องสนับสนุนวันที่ก่อนปีของการนำไปใช้ (กล่าวว่า min อาจเป็น 2007 หากเป็นวันที่เก่าที่สุดในระบบ) - การประทับเวลาที่ใช้ DST (ซึ่งไม่มีอยู่จริง )
- รัฐสองตัวอักษรของสหรัฐอเมริกาสามารถจัดเก็บในไบต์เดียว
- ความยาว
ENUM
สามารถแยกออกเป็นประเภทข้อมูลที่กำหนดเองเพื่อให้DESCRIBE
ผลลัพธ์ที่ได้จะไม่ยุ่งเหยิงเมื่อมองด้วยการห่อทั้งหมด
ฉันคาดว่าตัวจัดการชนิดข้อมูลจะถูกจัดเก็บคล้ายกับวิธีการจัดเก็บฟังก์ชัน
มีอะไรในระยะไกลเช่นนี้ในเครื่องมือฐานข้อมูลใด ๆ ฉันส่วนใหญ่ใช้ MySQL แต่ฉันอยากรู้ว่าสิ่งนี้เคยถูกนำไปใช้หรือไม่ทำให้แอปพลิเคชันเรียกใช้ฟังก์ชันเช่นINET_ATON
ฟังก์ชัน
MS SQL ดูเหมือนจะมีบางอย่างในลักษณะนั้น แต่ฉันอยากจะรู้ว่ามันเป็นมากกว่าคำพ้อง (ตัวอย่างเช่นboolean
อาจจะเป็นคำพ้องหาtinyint(1)
หรือpostal_code
อย่างใดอย่างหนึ่งchar
หรือvarchar
(5
หรือ9
หรือ10)
) พ้องจะไม่ได้สิ่งที่ฉันถามเกี่ยวกับที่นี่
IPv6
a binary(16)
หรือ จำกัด เฉพาะ aliasing (ซึ่งสามารถใช้สำหรับการstate
เป็นenum
s)
int
จะไม่ทำงานฐานข้อมูลสำหรับสากล - แคนาดายกตัวอย่างเช่นการใช้รูปแบบของ 'A9A A9A ฯ การสร้างประเภทข้อมูลที่กำหนดเองสำหรับรหัสไปรษณีย์น่าจะเป็นความคิดที่ดี อย่างไรก็ตามคุณอาจต้องการตรวจสอบอีกครั้งว่าคุณวางแผนที่จะจัดการกับสิ่งเหล่านั้นอย่างไร (การจัดเก็บสถานะในเขตข้อมูลไบต์เดียวมีปัญหา 'อื่น ๆ ' ที่อาจเกิดขึ้นได้) และอย่าดำเนินการประเภทข้อมูลวันที่ / เวลาอีกครั้งเว้นแต่ว่าข้อมูลที่ให้นั้นจะไม่เพียงพอ (ขนาดไม่นับ) คุณจะสร้างความสับสนให้กับผู้คน