ชนิด "varchar" และ "text" แตกต่างกันใน PostgreSQL อย่างไร


15

สิ่งที่ฉันรู้เกี่ยวกับความแตกต่างของพวกเขานั้นvarcharมี จำกัด และtextไม่ใช่ เอกสารไม่ได้พูดถึงเกี่ยวกับเรื่องนี้

นั่นคือความแตกต่างเท่านั้นจริง ๆ ? ไม่คำนึงถึงประสิทธิภาพหรืออื่น ๆ ?


1
สิ่งนี้ควรย้ายไปยังผู้ดูแลฐานข้อมูลจริงๆ มันไม่มีอะไรเกี่ยวข้องกับการดูแลเซิร์ฟเวอร์
Evan Carroll

คำตอบ:


22

พื้นหลังของสิ่งนี้คือ: ระบบ Postgres เก่าใช้ภาษา PostQUEL และใช้ประเภทข้อมูลที่มีชื่อtext(เพราะมีคนคิดว่าเป็นชื่อที่ดีสำหรับประเภทที่เก็บข้อความ) จากนั้น Postgres จะถูกแปลงให้ใช้ SQL เป็นภาษาของมัน เพื่อให้บรรลุความเข้ากันได้ของ SQL แทนการเปลี่ยนชื่อtextประเภทชนิดใหม่varcharถูกเพิ่มเข้ามา แต่ทั้งสองประเภทใช้รูทีน C เดียวกันภายใน

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

แต่นอกเหนือจากจุดปรับเหล่านี้ไม่มีความแตกต่างที่เห็นได้ชัดคือ ใช้อย่างใดอย่างหนึ่งที่ดูดีกว่าสำหรับคุณ ;-)


โอ้คำอธิบายที่ดี ฉันจะใช้ 'ข้อความ' เพราะฉันไม่สนใจความเข้ากันได้ซึ่งบล็อกที่ใช้ประโยชน์ของผลิตภัณฑ์เฉพาะ ขอบคุณ!
Eonil

1

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


0

http://www.postgresql.org/docs/8.4/interactive/datatype-character.html

character varying(n), varchar(n)        variable-length with limit
text                                    variable unlimited length

ข้อความที่ไม่มีความยาวประกาศ ไม่มีความแตกต่างด้านประสิทธิภาพระหว่างสองประเภทนี้


5
คุณยังสามารถใช้ varchar โดยไม่มีส่วน () ซึ่งจะทำให้มีความยาวไม่ จำกัด เช่นกันและทำให้เทียบเท่ากับข้อความมากหรือน้อย
Magnus Hagander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.