utf8 กับ latin1 แตกต่างกันอย่างไร
utf8 กับ latin1 แตกต่างกันอย่างไร
คำตอบ:
UTF-8เตรียมพร้อมสำหรับการครอบครองโลกLatin1ไม่ใช่
ถ้าคุณกำลังพยายามที่จะเก็บอักขระที่ไม่ใช่ภาษาละตินเช่นจีน, ญี่ปุ่น, ภาษาฮิบรู, รัสเซีย, ฯลฯ โดยใช้การเข้ารหัส Latin1 แล้วพวกเขาจะจบลงเช่นอาการภาษาต่างดาว คุณอาจพบว่าข้อความเกริ่นนำของบทความนี้มีประโยชน์ (และมากยิ่งขึ้นหากคุณรู้จัก Java เล็กน้อย)
โปรดทราบว่าการสนับสนุน UTF-8 แบบ 4 ไบต์เต็มได้รับการแนะนำใน MySQL 5.5 เท่านั้น ก่อนเวอร์ชันดังกล่าวจะเพิ่มได้สูงสุด 3 ไบต์ต่ออักขระไม่ใช่ 4 ไบต์ต่ออักขระ ดังนั้นจึงรองรับเฉพาะเครื่องบิน BMP เท่านั้นไม่ใช่เช่นเครื่องบิน Emoji หากคุณต้องการการสนับสนุน UTF-8 4 ไบต์เต็มรูปแบบให้อัปเกรด MySQL เป็นอย่างน้อย 5.5 หรือไปที่ RDBMS อื่นเช่น PostgreSQL ใน MySQL 5.5+ utf8mb4
ก็เรียกว่า
VARBINARY
แทนVARCHAR
และถอดรหัส / เข้ารหัสในระดับธุรกิจด้วยตัวคุณเอง แต่นี่เป็นเรื่องที่แฮ็ก ลองถามคำถามใหม่อาจมีวิธีที่ดีกว่านี้
ในภาษาละติน 1 อักขระแต่ละตัวมีความยาวเท่ากับหนึ่งไบต์ ใน utf8 อักขระสามารถประกอบด้วยมากกว่าหนึ่งไบต์ ดังนั้น utf8 จึงมีอักขระมากกว่า latin1 (และอักขระที่มีเหมือนกันไม่จำเป็นต้องแสดงด้วยไบต์ / bytesequence เดียวกัน)
binary
เรียง ... ? และอันไหนดีกว่าสำหรับฟิลด์ภาษาอังกฤษ / ตัวเลข: ascii_general_ci
หรือascii_bin
?