ฉันต้องการเก็บรหัสไปรษณีย์ไว้ในฐานข้อมูล คอลัมน์ควรมีขนาดใหญ่แค่ไหน?


103

ฉันคาดว่าคอลัมน์จะเป็น VARCHAR2 ใน Oracle Database ของฉัน

US Zips คือ 9

แคนาดาคือ 7

ฉันคิดว่า 32 อักขระน่าจะเป็นขีด จำกัด บนที่สมเหตุสมผล

ฉันขาดอะไรไป?

[แก้ไข] TIL: 12 เป็นคำตอบที่สมเหตุสมผลสำหรับคำถามขอบคุณทุกคนที่มีส่วนร่วม


ลิงค์ที่เป็นประโยชน์อย่างไรก็ตามความแม่นยำอาจคลาดเคลื่อนไปบ้าง EG มันแสดงรายการรหัสไปรษณีย์ออสเตรเลียเป็น 7 ตัวอักษรในเมื่อความจริงพวกเขากำลัง 4. Ref: en.wikipedia.org/wiki/Postcodes_in_Australiaและรายการรหัสไปรษณีย์ที่มีอยู่ในwww1.auspost.com.au/postcodes
rossp

re: ความคิดเห็นก่อนหน้าของฉัน - นั่นไม่ได้หมายความว่ารายการนี้ไม่มีประโยชน์เป็นแนวทาง สมมติว่ารายการผิดพลาดที่ด้านข้างของรหัสไปรษณีย์ที่ยาวที่สุดความยาวที่ยาวที่สุดคือ 9 ตัวอักษรดังนั้น 16 ตัวอักษรหรือแถวนั้นควรให้คุณหายใจได้มาก
rossp

นอกจากนี้รายชื่อประเทศยังค่อนข้างสั้น ฉันแน่ใจว่ามีประเทศอื่น ๆ บนโลกมากกว่าที่ระบุไว้ ...
Robert Koritnik

2
อ้างอิงจากen.wikipedia.org/wiki/List_of_postal_codesตัวอักษรที่ยาวที่สุดคือ 12 ตัวอักษรหากคุณจัดเก็บ "-" มิฉะนั้น 11
Neil McGuigan

@CMS: คุณอาจต้องการอัปเดตลิงก์ไปยังหน้าวิกิพีเดียนี้ดูเหมือนว่าจะมีรายละเอียดมากขึ้น
Vajk Hermecz

คำตอบ:


51

การอ่านผ่านหน้ารหัสไปรษณีย์ของ Wikipedia 32 ตัวอักษรน่าจะเกินพอแล้ว ฉันจะบอกว่าแม้ 16 ตัวอักษรก็ดี


8
ลิงค์ที่ดี แม้แต่การอนุญาตให้ใช้เครื่องหมายวรรคตอนใน US ZIP + 4 อักขระ 10 ตัวก็เพียงพอแล้วสำหรับประเทศใด ๆ เท่าที่ฉันจะบอกได้
Jonathan Leffler

จากลิงค์นี้จากหน้าที่เชื่อมโยงด้านบนฉันจะไปกับ 18 ประเทศเพื่อรองรับประเทศเช่นชิลี: en.wikipedia.org/wiki/List_of_postal_codes
mopo922

5
ชิลีมี 7 ตัว หน้าเว็บที่คุณอ้างถึงจะแสดงความแปรปรวนของเครื่องหมายวรรคตอน
EvilTeach

21

ตามที่ยกมาโดย @ neil-mcguigan, wikipedia มีหน้าที่เหมาะสมในหัวข้อนี้ ตามอักขระ 12 ตัวที่ควรทำ: http://en.wikipedia.org/wiki/List_of_postal_codes

บทความวิกิพีเดียแสดงรายชื่อประเทศประมาณ 254 ประเทศซึ่งค่อนข้างดีเกี่ยวกับUPU (Universal Postal Union)มีสมาชิก 192 ประเทศ


2
โปรดทราบว่ามอนต์เซอร์รัตมีเพียง 8 ตัวอักษร 1110-1350 หมายถึงช่วง Discovermni.com/about-montserrat/montserrat-post-codes
Vajk Hermecz

อาจเป็นไปได้ว่า Wikipedia ต้องการการแก้ไขเนื่องจากรหัสไปรษณีย์ที่มีลักษณะคล้ายกันสำหรับมอลตามีรหัสทั่วไปเช่น "AAA NNNN" ฉันไม่รังเกียจที่จะมีอักขระ 15 ตัวเพราะอาจมีปัญหาน้อยกว่าในภายหลังหากเราต้องปรับความยาวคอลัมน์รวมถึงการใช้ประเภทข้อมูลอย่างถูกต้องก็ไม่ควรใช้อักขระทั้ง 15 ตัวอยู่ดี (อาจเป็น varchar หรือ nvarchar หรือ like?) .
Manohar Reddy Poreddy

12

เหตุใดคุณจึงประกาศขนาดเขตข้อมูลที่ใหญ่กว่าข้อมูลจริงที่คุณคาดว่าจะจัดเก็บในนั้น

หากเวอร์ชันเริ่มต้นของแอปพลิเคชันของคุณจะรองรับที่อยู่ในสหรัฐอเมริกาและแคนาดา (ซึ่งฉันอนุมานจากข้อเท็จจริงที่ว่าคุณเรียกขนาดเหล่านั้นในคำถามของคุณ) ฉันจะประกาศฟิลด์นี้เป็น VARCHAR2 (9) (หรือ VARCHAR2 ( 10) หากคุณต้องการจัดเก็บยัติภังค์ในช่อง ZIP + 4) แม้แต่การดูโพสต์ที่คนอื่นทำกับรหัสไปรษณีย์ข้ามประเทศ VARCHAR2 (9) หรือ VARCHAR2 (10) ก็เพียงพอแล้วหากไม่ใช่ประเทศอื่น ๆ ทั้งหมด

ในบรรทัดคุณสามารถแก้ไขคอลัมน์เพื่อเพิ่มความยาวได้ตลอดเวลาหากจำเป็นต้องใช้ แต่โดยทั่วไปแล้วเป็นการยากที่จะป้องกันไม่ให้ใครบางคนตัดสินใจรับ "ความคิดสร้างสรรค์" และใส่อักขระ 50 ตัวลงในช่อง VARCHAR2 (50) ด้วยเหตุผลใดเหตุผลหนึ่ง (เช่นเพราะพวกเขาต้องการบรรทัดอื่นบนป้ายกำกับการจัดส่ง) คุณต้องจัดการกับการทดสอบกรณีขอบเขต (ทุกแอปพลิเคชันที่แสดง ZIP จะรองรับอักขระ 50 ตัวหรือไม่) และด้วยความจริงที่ว่าเมื่อไคลเอนต์ดึงข้อมูลจากฐานข้อมูลโดยทั่วไปแล้วพวกเขาจะจัดสรรหน่วยความจำตามขนาดสูงสุดของข้อมูลที่จะดึงไม่ใช่ความยาวจริงของแถวที่กำหนด อาจไม่ใช่เรื่องใหญ่ในกรณีนี้ แต่ 40 ไบต์ต่อแถวอาจเป็นหน่วยความจำที่เหมาะสมสำหรับบางสถานการณ์

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


4
สมมติว่าเรากำลังเขียนโค้ดในสิ่งที่โง่ ๆ เช่น Pro * C การมีฟิลด์ที่ใหญ่พอสำหรับการเติบโตหมายความว่าโค้ดจะไม่จำเป็นต้องแตะต้องหากการใช้งานเพิ่มขึ้น
EvilTeach

ใช่การแบ่งรหัสไปรษณีย์ของสหรัฐฯออกเป็น 5 และ 4 หลักนั้นสมเหตุสมผลขึ้นอยู่กับว่าคุณวางแผนจะใช้มันเพื่ออะไร ตัวอย่างเช่นหากคุณทำการจับคู่ที่อยู่บางประเภทคุณอาจต้องการจับคู่บน zip5 ก่อนและแก้ไขสถานการณ์ที่คลุมเครือด้วย zip 9 นอกจากนี้ยังช่วยในการใช้รหัสประเทศ
EvilTeach

3

สิ่งที่คุณขาดหายไปคือสาเหตุที่คุณต้องจัดการรหัสไปรษณีย์เป็นพิเศษ

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

เพียงสร้างช่องที่อยู่สามหรือสี่ช่องของ VARCHAR2 (50) [ตัวอย่าง] และให้ผู้ใช้ป้อนสิ่งที่ต้องการ

คุณจำเป็นต้องจัดกลุ่มคำสั่งซื้อหรือธุรกรรมของคุณด้วยรหัสไปรษณีย์หรือไม่? ฉันคิดว่าไม่เนื่องจากประเทศต่างๆมีรูปแบบที่แตกต่างกันอย่างมากสำหรับสาขานี้


ฉันเห็นด้วย. การใช้ฟิลด์ VARCHAR2 ความเป็นจริงสำหรับฟิลด์เช่นรหัสไปรษณีย์มันไม่สำคัญเลย ใหญ่เกินไปเล็กน้อยดีกว่าลูกค้ารายหนึ่งที่น่ารำคาญเพราะป้อนรายละเอียดไม่ได้
Toby Allen

และ varchars มีประโยชน์เนื่องจากฐานข้อมูล (อย่างน้อย DB2) อาจเพิ่มประสิทธิภาพการจัดเก็บข้อมูลเพื่อไม่ให้เสียพื้นที่จัดเก็บข้อมูล
paxdiablo

1
เราจะชี้ให้เห็นว่าการจัดเรียงตามประเทศและรหัสไปรษณีย์จะส่งผลให้อัตราค่าไปรษณีย์ถูกกว่าในบางแห่ง
EvilTeach

10
ไม่เห็นด้วย. ในบางครั้งคุณจะตัดสินใจว่าคุณจะต้องตรวจสอบที่อยู่ในฐานข้อมูลของคุณ (เช่นเพื่อแก้ไขข้อผิดพลาดในการพิมพ์และการป้อนข้อมูล) และนั่นคือเวลาที่คุณจะพบประโยชน์ของการสร้างแบบจำลองข้อมูลของคุณอย่างเหมาะสมแทนที่จะเป็นเพียงการผลักดันทุกอย่างใน ถัง
Gary Myers

1
@Pax หากคุณส่งจดหมายจำนวนมากไปยัง Royal Mail ที่กำหนดโดยหัวหน้าเขต (จดหมายตัวแรก / ตัวอักษรสองตัว) ของรหัสไปรษณีย์คุณสามารถจัดส่งโดย MailSort ซึ่งมีราคาถูกกว่าจดหมายชั้นสองทั่วไป นั่นเป็นเพียงตัวอย่างเดียว
Richard Gadsden

3

นอร์มัลไลเซชัน? อาจมีการใช้รหัสไปรษณีย์มากกว่าหนึ่งครั้งและอาจเกี่ยวข้องกับชื่อถนนหรือชื่อเมือง แยกโต๊ะ


น่าสนใจ. มุมมองที่แตกต่างกันก็ลดลงโดยไม่มีเหตุผลว่าทำไม +1
EvilTeach

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

4
@EvilTeach: ฉันพนันได้เลยว่ามันถูกโหวตลงเพราะมันไม่ตรงประเด็น มันบอกคุณได้หรือไม่ว่าคอลัมน์ควรมีขนาดใหญ่เพียงใดในการจัดเก็บรหัสไปรษณีย์ที่เป็นไปได้ทั้งหมดในโลก เลขที่
wmax

2

รหัสไปรษณีย์ของแคนาดามีความยาวเพียง 6 อักขระในรูปแบบตัวอักษรและตัวเลข (LNLNLN)


3
รหัสไปรษณีย์ของแคนาดามีช่องว่างตรงกลาง "ANA NAN" นั่นคือ 7 อักขระ
EvilTeach

1
แต่ช่องว่างจะอยู่ตรงกลางเสมอดังนั้นคุณไม่จำเป็นต้องจัดเก็บ
Graeme Perrow

1
ช่องว่างดูเหมือนจะไม่เป็นส่วนหนึ่งของข้อมูล: "หมายเหตุ: รหัสไปรษณีย์ของแคนาดาจะถูกจัดรูปแบบตามลำดับเดียวกันเสมอ: อักขระที่เป็นตัวอักษร / ตัวเลข / อัลฟา / ตัวเลข / อัลฟา / ตัวเลข (เช่น K1A0B1)" มาจากเว็บไซต์ Canada Post
tegbains

2
ฉันไม่คิดว่าการเว้นช่องว่างจะเกี่ยวข้องกับ 'การทำให้เป็นมาตรฐาน' เป็นเพียงปัญหาการแสดงผลเท่านั้น เช่นเดียวกับขีดกลางในหมายเลขบัญชี ฉันจะไม่เก็บมันและฉันจะไม่พึ่งพามันเพื่อระบุรหัสไปรษณีย์ของแคนาดาตามความต้องการของเขตข้อมูล CountryCode (int) ที่สามารถจัดทำดัชนีได้ การแยกชั้นข้อมูลและการนำเสนอเป็นวิธีที่ถูกต้อง
แซม

2
Canada Post ต้องการช่องว่างในรหัสไปรษณีย์เมื่อจ่าหน้าซองจดหมาย ควรจัดเก็บไว้ในที่ว่างและจัดการการตรวจสอบความถูกต้องเมื่อเข้า
RevNoah

2

สหราชอาณาจักรได้เผยแพร่มาตรฐาน: UK Government Data Standards Catalog

Max 35 characters per line 

ที่อยู่ไปรษณีย์ระหว่างประเทศ:

Minimum of 2 lines and maximum of 5 lines for the postal delivery point 
details, plus 1 line for country and 1 line for postcode/zip code 

รหัสไปรษณีย์ของสหราชอาณาจักรมีความยาว:

Minimum 6 and Maximum 8 characters 

1

หากคุณต้องการรวมรหัสไปรษณีย์ในฐานข้อมูลฐานข้อมูล geonames จะดีที่สุด แม้ว่าจะใช้งานและเข้าใจได้ยาก แต่ก็เป็นฐานข้อมูลทางภูมิศาสตร์ที่ใหญ่ที่สุดที่ผู้ใช้อย่างเราสามารถใช้ได้โดยเสรี

ฐานข้อมูลอื่น ๆ ทั้งหมดมีโอกาสมากหรือน้อยที่มีข้อมูลและโครงสร้างเดียวกัน พวกเขาเพียงแค่ลบข้อมูลเพิ่มเติม / ซ้ำซ้อนออกจากฐานข้อมูล หากคุณกำลังทำมันสำหรับระบบโหลดต่ำให้ใช้บริการฟรีของพวกเขาข้อ จำกัด นั้นน่าดึงดูดและมีอินเทอร์เฟซที่ง่ายกว่าโดยใช้ json และ ajax คุณสามารถดูขีด จำกัด ได้ที่นี่

สำหรับข้อมูลของคุณ varchar (20) เพียงพอสำหรับการจัดเก็บรหัสไปรษณีย์

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