สิ่งที่ฉันรู้เกี่ยวกับความแตกต่างของพวกเขานั้นvarchar
มี จำกัด และtext
ไม่ใช่ เอกสารไม่ได้พูดถึงเกี่ยวกับเรื่องนี้
นั่นคือความแตกต่างเท่านั้นจริง ๆ ? ไม่คำนึงถึงประสิทธิภาพหรืออื่น ๆ ?
สิ่งที่ฉันรู้เกี่ยวกับความแตกต่างของพวกเขานั้นvarchar
มี จำกัด และtext
ไม่ใช่ เอกสารไม่ได้พูดถึงเกี่ยวกับเรื่องนี้
นั่นคือความแตกต่างเท่านั้นจริง ๆ ? ไม่คำนึงถึงประสิทธิภาพหรืออื่น ๆ ?
คำตอบ:
พื้นหลังของสิ่งนี้คือ: ระบบ Postgres เก่าใช้ภาษา PostQUEL และใช้ประเภทข้อมูลที่มีชื่อtext
(เพราะมีคนคิดว่าเป็นชื่อที่ดีสำหรับประเภทที่เก็บข้อความ) จากนั้น Postgres จะถูกแปลงให้ใช้ SQL เป็นภาษาของมัน เพื่อให้บรรลุความเข้ากันได้ของ SQL แทนการเปลี่ยนชื่อtext
ประเภทชนิดใหม่varchar
ถูกเพิ่มเข้ามา แต่ทั้งสองประเภทใช้รูทีน C เดียวกันภายใน
ตอนนี้ในระดับหนึ่งและในบางแห่งtext
ฮาร์ดโค้ดเป็นชนิดเริ่มต้นในกรณีที่ไม่มีสิ่งอื่นมา นอกจากนี้ยังมีฟังก์ชั่นมากที่สุดที่มีอยู่เช่นการเท่านั้นโต้แย้งหรือกลับtext
text
ทั้งสองชนิดนี้เข้ากันได้กับไบนารีดังนั้นการคัดเลือกเป็นการดำเนินการแยกวิเคราะห์เวลาเล็กน้อย แต่การใช้text
ยังคงเป็นธรรมชาติยิ่งกว่าระบบ
แต่นอกเหนือจากจุดปรับเหล่านี้ไม่มีความแตกต่างที่เห็นได้ชัดคือ ใช้อย่างใดอย่างหนึ่งที่ดูดีกว่าสำหรับคุณ ;-)
ดูคำถามที่คล้ายกันนี้ เรื่องตลกคือไม่มีความแตกต่าง แต่การระบุความยาวสูงสุดเช่นvarchar(n)
โดยทั่วไปไม่ได้อยู่ในความโปรดปรานของคุณเพราะมันใช้พื้นที่มากขึ้น แต่ไม่ปรับปรุงประสิทธิภาพ
http://www.postgresql.org/docs/8.4/interactive/datatype-character.html
character varying(n), varchar(n) variable-length with limit
text variable unlimited length
ข้อความที่ไม่มีความยาวประกาศ ไม่มีความแตกต่างด้านประสิทธิภาพระหว่างสองประเภทนี้