ข้อผิดพลาดของ MySQL: ข้อกำหนดที่สำคัญโดยไม่มีความยาวของคีย์


363

ฉันมีตารางที่มีคีย์หลักนั่นคือ varchar (255) บางกรณีเกิดขึ้นโดยที่ 255 อักขระไม่เพียงพอ ฉันพยายามเปลี่ยนฟิลด์เป็นข้อความ แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

BLOB/TEXT column 'message_id' used in key specification without a key length

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

แก้ไข: ฉันควรชี้ให้เห็นว่าตารางนี้มีคีย์หลักผสมที่มีหลายคอลัมน์


9
ตารางไม่สามารถมีคีย์หลักได้หลายตัว คุณหมายความว่ามันมีคีย์หลักรวม (ที่มีมากกว่าหนึ่งคอลัมน์) หรือมีหลายUNIQUEคีย์?
Quassnoi

1
ในกรณีของฉันด้วยเหตุผลบางอย่างฉันมีประเภทข้อความสำหรับคอลัมน์อีเมลแทน VARCHAR
กริช

ใช้ VARCHAR สำหรับตัวอักษรและตัวเลขที่ไม่ซ้ำกัน
JWC

คำตอบ:


571

ข้อผิดพลาดเกิดขึ้นเนื่องจาก MySQL สามารถจัดทำดัชนีเฉพาะ N ตัวแรกของ BLOB หรือTEXTคอลัมน์ ดังนั้นข้อผิดพลาดส่วนใหญ่เกิดขึ้นเมื่อมีสนามประเภท / คอลัมน์TEXTหรือหยดหรือผู้ที่เป็นของTEXTหรือBLOBประเภทเช่นTINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXTและLONGTEXTที่คุณพยายามที่จะทำให้คีย์หลักหรือดัชนี ด้วยความยาวเต็มBLOBหรือTEXTไม่มีค่า MySQL ไม่สามารถรับประกันเอกลักษณ์ของคอลัมน์ได้เนื่องจากมีขนาดที่เปลี่ยนแปลงและขนาดแบบไดนามิก ดังนั้นเมื่อใช้BLOBหรือTEXTพิมพ์เป็นดัชนีจะต้องระบุค่าของ N เพื่อให้ MySQL สามารถกำหนดความยาวของคีย์ได้ อย่างไรก็ตาม, MySQL ไม่สนับสนุนการ จำกัด ระยะเวลาที่สำคัญในการหรือTEXTBLOBTEXT(88)เพียงแค่จะไม่ทำงาน

ข้อผิดพลาดจะปรากฏขึ้นเมื่อคุณพยายามแปลงคอลัมน์ตารางจากnon-TEXTและnon-BLOBพิมพ์เช่นVARCHARและENUMเป็นTEXTหรือBLOBพิมพ์โดยที่คอลัมน์ถูกกำหนดเป็นข้อ จำกัด หรือดัชนีที่ไม่ซ้ำกันแล้ว คำสั่ง Alter Table SQL จะล้มเหลว

วิธีแก้ไขปัญหาคือการลบคอลัมน์TEXTหรือBLOBออกจากดัชนีหรือข้อ จำกัด ที่ไม่ซ้ำกันหรือตั้งค่าฟิลด์อื่นเป็นคีย์หลัก หากคุณไม่สามารถทำเช่นนั้นได้และต้องการกำหนดขีด จำกัด บนTEXTหรือBLOBคอลัมน์ลองใช้VARCHARประเภทและวางความยาวที่ จำกัด ไว้ โดยค่าเริ่มต้นVARCHARนั้น จำกัด ไว้ไม่เกิน 255 ตัวอักษรและต้องระบุขีด จำกัด โดยนัยภายในวงเล็บปีกกาหลังการประกาศเช่นVARCHAR(200)จะ จำกัด ความยาวไม่เกิน 200 อักขระเท่านั้น

บางครั้งแม้ว่าคุณไม่ได้ใช้TEXTหรือBLOBประเภทที่เกี่ยวข้องในตารางของคุณข้อผิดพลาด 1170 อาจปรากฏขึ้น มันเกิดขึ้นในสถานการณ์เช่นเมื่อคุณระบุVARCHARคอลัมน์เป็นคีย์หลัก แต่ตั้งค่าความยาวหรือขนาดตัวอักษรผิด VARCHARสามารถยอมรับได้สูงสุด 256 อักขระดังนั้นสิ่งใดก็ตามเช่นVARCHAR(512)จะบังคับให้ MySQL แปลงชนิดข้อมูลVARCHAR(512)เป็นอัตโนมัติSMALLTEXTซึ่งต่อมาจะล้มเหลวด้วยข้อผิดพลาด 1170 กับความยาวของคีย์หากคอลัมน์ถูกใช้เป็นคีย์หลักหรือดัชนีที่ไม่ซ้ำกันหรือไม่ซ้ำกัน ในการแก้ปัญหานี้ให้ระบุตัวเลขที่น้อยกว่า 256 เป็นขนาดVARCHARเขตข้อมูล

การอ้างอิง: ข้อผิดพลาดของ MySQL 1170 (42000): คอลัมน์ BLOB / TEXT ที่ใช้ในการระบุคีย์โดยไม่มีความยาวคีย์


13
dev.mysql.com/doc/refman/5.0/en/char.html "ค่าในคอลัมน์ VARCHAR เป็นสตริงที่มีความยาวผันแปรได้สามารถระบุความยาวเป็นค่าตั้งแต่ 0 ถึง 255 ก่อน MySQL 5.0.3 และ 0 ถึง 65,535 ในรุ่น 5.0.3 และใหม่กว่าความยาวสูงสุดที่มีประสิทธิภาพของ VARCHAR ใน MySQL 5.0.3 และใหม่กว่านั้นขึ้นอยู่กับขนาดแถวสูงสุด (65,535 ไบต์ซึ่งแบ่งใช้ระหว่างคอลัมน์ทั้งหมด) "
umassthrower

1
ที่คุณพูดว่า "MySQL สามารถทำดัชนีเฉพาะ N ตัวแรกของคอลัมน์ BLOB หรือ TEXT" ค่าของ N คืออะไร?
jameshfisher

2
"เมื่อคุณสร้างดัชนีคอลัมน์ BLOB หรือ TEXT คุณต้องระบุความยาวของคำนำหน้าสำหรับดัชนี" dev.mysql.com/doc/refman/5.6/th/column-indexes.html
Vinicius Pinto

86

คุณควรกำหนดส่วนนำของTEXTคอลัมน์ที่คุณต้องการจัดทำดัชนี

InnoDBมีข้อ จำกัด ของ768ไบต์ต่อคีย์ดัชนีและคุณจะไม่สามารถสร้างดัชนีได้นานกว่านั้น

สิ่งนี้จะทำงานได้ดี:

CREATE TABLE t_length (
      mydata TEXT NOT NULL,
      KEY ix_length_mydata (mydata(255)))
    ENGINE=InnoDB;

โปรดทราบว่าค่าสูงสุดของขนาดคีย์ขึ้นอยู่กับชุดอักขระคอลัมน์ มันเป็น767ตัวอักษรสำหรับชุดอักขระแบบไบต์เดียวเช่นLATIN1เดียวกับ255ตัวอักษรสำหรับUTF8( MySQLใช้เฉพาะBMPที่ต้องการมากที่สุด3ไบต์ไม่เกินอักขระต่อตัว)

หากคุณต้องการทั้งคอลัมน์ของคุณจะเป็นPRIMARY KEYคำนวณSHA1หรือกัญชาและใช้มันเป็นMD5PRIMARY KEY


สิ่งที่ฉันกำลังมองหา ขอบคุณ!
Jonathon Hill

ขนาด (255 ที่นี่) เป็นตัวอักษรจริงหรือไม่และไม่ใช่ไบต์? เพราะฉันนึกภาพออกได้ว่าการใช้ตัวอักษรสำหรับ UTF-8 นั้นซับซ้อนมากโดยไม่มีประโยชน์เพิ่มเติม
Alexis Wilke

ขออภัยฉันไม่ปฏิบัติตามคำถามของคุณ จากเอกสาร: การจำกัดความยาวของส่วนนำหน้าคีย์ดัชนีคือ 767 ไบต์สำหรับตาราง InnoDB ที่ใช้รูปแบบREDUNDANTหรือCOMPACTแถว ตัวอย่างเช่นคุณอาจถึงขีด จำกัด นี้ด้วยดัชนีคำนำหน้าคอลัมน์มากกว่า 255 อักขระในคอลัมน์TEXTหรือVARCHARสมมติว่าชุดอักขระ utf8mb3 และสูงสุด 3 ไบต์สำหรับแต่ละอักขระ REDUNDANTและCOMPACTเป็นรูปแบบเดียวที่ใช้ได้ในเวลาที่ได้รับคำตอบนี้
Quassnoi

62

คุณสามารถระบุความยาวคีย์ในคำขอเปลี่ยนแปลงตารางบางอย่างเช่น:

alter table authors ADD UNIQUE(name_first(20), name_second(20));

1
นี่คือสิ่งที่ฉันต้องการเพื่อแก้ไขปัญหาเดียวกัน ขอบคุณ!
ต่อการค้นหา Aronsson

2
คุณควรระวังให้มากด้วยวิธีนี้! นี่อาจเป็นทางออกที่ง่ายที่สุด แต่ในหลาย ๆ สถานการณ์ไม่ใช่วิธีที่ดีที่สุด คีย์ของคุณประกอบด้วยสองคอลัมน์และลำดับคอลัมน์เป็นสิ่งสำคัญ
MrD

คำตอบที่ดีที่สุดที่นี่
George Chalhoub

นี่เป็นการแก้ไขปัญหาของฉันขอบคุณมาก!
dellair

22

MySQL ไม่อนุญาตให้จัดทำดัชนีเต็มมูลค่าของBLOB, TEXTและระยะยาวVARCHARคอลัมน์เนื่องจากข้อมูลที่พวกเขามีได้มากและโดยปริยายดัชนี DB จะมีขนาดใหญ่หมายถึงผลประโยชน์จากดัชนีไม่มี

MySQL ต้องการให้คุณกำหนดตัวอักษร N ตัวแรกที่จะทำดัชนีและเคล็ดลับคือเลือกหมายเลข N ที่ยาวพอที่จะให้การเลือกที่ดี แต่สั้นพอที่จะประหยัดพื้นที่ คำนำหน้าควรยาวพอที่จะทำให้ดัชนีเกือบมีประโยชน์เท่าที่ควรหากคุณทำดัชนีทั้งคอลัมน์

ก่อนที่เราจะไปไกลกว่านั้นให้เรานิยามคำศัพท์ที่สำคัญบางอย่าง ดัชนีหัวกะทิคืออัตราส่วนของค่าดัชนีรวมและจำนวนแถวทั้งหมด นี่คือตัวอย่างหนึ่งสำหรับตารางทดสอบ:

+-----+-----------+
| id  | value     |
+-----+-----------+
| 1   | abc       |
| 2   | abd       |
| 3   | adg       |
+-----+-----------+

หากเราทำดัชนีเฉพาะอักขระตัวแรก (N = 1) ตารางดัชนีจะมีลักษณะดังนี้ตารางต่อไปนี้:

+---------------+-----------+
| indexedValue  | rows      |
+---------------+-----------+
| a             | 1,2,3     |
+---------------+-----------+

ในกรณีนี้การเลือกดัชนีเท่ากับ IS = 1/3 = 0.33

ให้เราดูว่าจะเกิดอะไรขึ้นถ้าเราเพิ่มจำนวนอักขระที่จัดทำดัชนีเป็นสอง (N = 2)

+---------------+-----------+
| indexedValue  | rows      |
+---------------+-----------+
| ab             | 1,2      |
| ad             | 3        |
+---------------+-----------+

ในสถานการณ์นี้คือ = 2/3 = 0.66 ซึ่งหมายความว่าเราเพิ่มการเลือกดัชนี แต่เรายังเพิ่มขนาดของดัชนีด้วย เคล็ดลับคือการหาจำนวน N น้อยที่สุดซึ่งจะส่งผลให้สูงสุดหัวกะทิดัชนี

มีสองวิธีที่คุณสามารถทำการคำนวณสำหรับตารางฐานข้อมูลของคุณ ฉันจะทำการสาธิตเกี่ยวกับการถ่ายโอนข้อมูลฐานข้อมูลนี้นี้

สมมติว่าเราต้องการเพิ่มคอลัมน์last_nameในพนักงานตารางลงในดัชนีและเราต้องการกำหนดจำนวนNที่น้อยที่สุดซึ่งจะสร้างการเลือกดัชนีที่ดีที่สุด

ก่อนอื่นให้เราระบุนามสกุลที่พบบ่อยที่สุด:

select count(*) as cnt, last_name 
from employees 
group by employees.last_name 
order by cnt

+-----+-------------+
| cnt | last_name   |
+-----+-------------+
| 226 | Baba        |
| 223 | Coorg       |
| 223 | Gelosh      |
| 222 | Farris      |
| 222 | Sudbeck     |
| 221 | Adachi      |
| 220 | Osgood      |
| 218 | Neiman      |
| 218 | Mandell     |
| 218 | Masada      |
| 217 | Boudaillier |
| 217 | Wendorf     |
| 216 | Pettis      |
| 216 | Solares     |
| 216 | Mahnke      |
+-----+-------------+
15 rows in set (0.64 sec)

อย่างที่คุณเห็นนามสกุลบาบาเป็นชื่อที่พบบ่อยที่สุด ตอนนี้เรากำลังจะไปหาคำนำหน้าlast_name ที่เกิดขึ้นบ่อยที่สุดเริ่มต้นด้วยคำนำหน้าห้าตัวอักษร

+-----+--------+
| cnt | prefix |
+-----+--------+
| 794 | Schaa  |
| 758 | Mande  |
| 711 | Schwa  |
| 562 | Angel  |
| 561 | Gecse  |
| 555 | Delgr  |
| 550 | Berna  |
| 547 | Peter  |
| 543 | Cappe  |
| 539 | Stran  |
| 534 | Canna  |
| 485 | Georg  |
| 417 | Neima  |
| 398 | Petti  |
| 398 | Duclo  |
+-----+--------+
15 rows in set (0.55 sec)

มีคำนำหน้าทั้งหมดเกิดขึ้นมากมายซึ่งหมายความว่าเราต้องเพิ่มหมายเลข N จนกว่าค่าจะใกล้เคียงกับตัวอย่างก่อนหน้านี้

นี่คือผลลัพธ์สำหรับ N = 9

select count(*) as cnt, left(last_name,9) as prefix 
from employees 
group by prefix 
order by cnt desc 
limit 0,15;

+-----+-----------+
| cnt | prefix    |
+-----+-----------+
| 336 | Schwartzb |
| 226 | Baba      |
| 223 | Coorg     |
| 223 | Gelosh    |
| 222 | Sudbeck   |
| 222 | Farris    |
| 221 | Adachi    |
| 220 | Osgood    |
| 218 | Mandell   |
| 218 | Neiman    |
| 218 | Masada    |
| 217 | Wendorf   |
| 217 | Boudailli |
| 216 | Cummings  |
| 216 | Pettis    |
+-----+-----------+

นี่คือผลลัพธ์สำหรับ N = 10

+-----+------------+
| cnt | prefix     |
+-----+------------+
| 226 | Baba       |
| 223 | Coorg      |
| 223 | Gelosh     |
| 222 | Sudbeck    |
| 222 | Farris     |
| 221 | Adachi     |
| 220 | Osgood     |
| 218 | Mandell    |
| 218 | Neiman     |
| 218 | Masada     |
| 217 | Wendorf    |
| 217 | Boudaillie |
| 216 | Cummings   |
| 216 | Pettis     |
| 216 | Solares    |
+-----+------------+
15 rows in set (0.56 sec)

นี่เป็นผลลัพธ์ที่ดีมาก ซึ่งหมายความว่าเราสามารถสร้างดัชนีในคอลัมน์ที่last_nameมีการจัดทำดัชนีเพียง 10 ตัวแรก ในคอลัมน์คำจำกัดความของตารางlast_nameมีการกำหนดเป็นVARCHAR(16)และหมายความว่าเราได้บันทึก 6 ไบต์ (หรือมากกว่านั้นถ้ามี UTF8 อักขระในนามสกุล) ต่อรายการ ในตารางนี้มี 1637 ค่าที่แตกต่างคูณด้วย 6 ไบต์มีค่าประมาณ 9KB และลองจินตนาการว่าตัวเลขนี้จะเติบโตได้อย่างไรถ้าตารางของเรามีจำนวนแถวนับล้าน

คุณสามารถอ่านวิธีการอื่น ๆ ในการคำนวณจำนวนNในการโพสต์ของฉันดัชนีคำนำหน้าใน MySQL


3
สิ่งนี้ไม่ได้รับการอัพเดตมากพอ ผมพบว่ามันจะมากเข้าใจง่ายกว่าคำตอบที่ได้รับการยอมรับ
Mawg กล่าวว่าคืนสถานะโมนิกา

10

ฉันได้รับข้อผิดพลาดนี้เมื่อเพิ่มดัชนีไปยังตารางที่มีคอลัมน์ประเภทข้อความ คุณต้องประกาศจำนวนขนาดที่คุณต้องการใช้กับข้อความแต่ละประเภท

ใส่จำนวนขนาดภายในวงเล็บ ()

หากใช้ไบต์มากเกินไปคุณสามารถประกาศขนาดในวงเล็บของ varchar เพื่อลดจำนวนที่ใช้สำหรับการทำดัชนี นี่คือแม้ว่าคุณจะประกาศขนาดสำหรับประเภทแล้วเช่น varchar (1,000) คุณไม่จำเป็นต้องสร้างตารางใหม่เหมือนที่คนอื่นพูด

การเพิ่มดัชนี

alter table test add index index_name(col1(255),col2(255));

การเพิ่มดัชนีที่ไม่ซ้ำ

alter table test add unique index_name(col1(255),col2(255));

คำตอบที่ง่ายที่สุดที่ฉันเชื่อและใช้ได้สำหรับฉันทันที ขอบคุณ
Matt Cremeens


4

อีกวิธีที่ยอดเยี่ยมในการจัดการกับสิ่งนี้คือการสร้างเขตข้อมูล TEXT ของคุณโดยไม่มีข้อ จำกัด ที่ไม่ซ้ำกันและเพิ่มเขตข้อมูล VARCHAR พี่น้องที่ไม่ซ้ำกันและมีส่วนย่อย (MD5, SHA1 ฯลฯ ) ของเขตข้อมูล TEXT คำนวณและจัดเก็บสรุปข้อมูลลงในฟิลด์ TEXT ทั้งหมดเมื่อคุณแทรกหรืออัปเดตฟิลด์ TEXT จากนั้นคุณมีข้อ จำกัด ที่ไม่ซ้ำกันเหนือฟิลด์ TEXT ทั้งหมด (แทนที่จะเป็นบางส่วนนำ) ที่สามารถค้นหาได้อย่างรวดเร็ว


1
คุณควรระมัดระวังอย่างยิ่งกับสตริงที่ "สุ่ม" อย่างสมบูรณ์เช่นที่สร้างโดย MD5 (), SHA1 () หรือ UUID () ค่าใหม่แต่ละค่าที่คุณสร้างขึ้นด้วยค่าเหล่านี้จะได้รับการแจกจ่ายด้วยวิธีการโดยพลการบนพื้นที่ขนาดใหญ่ซึ่งอาจทำให้ INSERT ช้าลงและมีการเลือก SELECT บางประเภท:
MrD

2
การกระจาย MD5, SHA1 บนข้อมูลที่ไม่เป็นอันตรายควรเป็นรูปแบบเดียวกันนั่นคือสิ่งที่แฮชใช้
jb

มันจะดีถ้าคุณสามารถยกตัวอย่าง
ดูแลเว็บ

3

อย่ามีค่ายาวเป็นคีย์หลัก นั่นจะทำลายประสิทธิภาพของคุณ ดูคู่มือ mysql, ส่วนที่ 13.6.13 'การปรับแต่งและแก้ไขปัญหา InnoDB ประสิทธิภาพ'

ให้ใช้คีย์ int ตัวแทนเป็นคีย์หลัก (พร้อม auto_increment) และคีย์ loong ของคุณเป็น UNIQUE สำรอง


2

เพิ่มคอลัมน์ varChar (255) อีกคอลัมน์ (โดยค่าเริ่มต้นเป็นสตริงว่างเปล่าไม่เป็นโมฆะ) เพื่อระงับการโอเวอร์โฟลว์เมื่อ 255 chars ไม่เพียงพอและเปลี่ยน PK นี้เพื่อใช้ทั้งสองคอลัมน์ สิ่งนี้ดูเหมือนจะไม่เหมือนกับ schema ของฐานข้อมูลที่ออกแบบมาอย่างดีและฉันขอแนะนำให้คุณใช้ตัวจำลองข้อมูลเพื่อดูสิ่งที่คุณมีเพื่อปรับโครงสร้างให้เป็นมาตรฐานมากขึ้น


2

วิธีแก้ไขปัญหาคือในCREATE TABLEคำสั่งของคุณคุณอาจเพิ่มข้อ จำกัดUNIQUE ( problemtextfield(300) )หลังจากคอลัมน์สร้างคำจำกัดความเพื่อระบุkeyความยาวของ300อักขระสำหรับTEXTฟิลด์ตัวอย่างเช่น จากนั้น300อักขระตัวแรกของproblemtextfield TEXTฟิลด์จะต้องไม่ซ้ำกันและความแตกต่างใด ๆ หลังจากนั้นจะถูกมองข้าม


1

นอกจากนี้หากคุณต้องการใช้ดัชนีในฟิลด์นี้คุณควรใช้เอนจินการจัดเก็บ MyISAM และประเภทดัชนี FULLTEXT


คุณอาจพิจารณาเพิ่มคำอธิบายและลิงค์ไปยังเอกสารประกอบ
LeeGee

1

ไม่มีใครพูดถึงมัน ... ด้วย utf8mb4 ซึ่งเป็น 4 ไบต์และยังสามารถเก็บอีโมติคอน (เราไม่ควรใช้ 3-byte utf8 อีกต่อไป) และเราสามารถหลีกเลี่ยงข้อผิดพลาดได้เช่นIncorrect string value: \xF0\x9F\x98\...เราไม่ควรใช้VARCHARทั่วไป(255)แต่แทนที่จะเป็นVARCHAR ( 191)เพราะในกรณีที่ utf8mb4 และ VARCHAR (255) ส่วนเดียวกันของข้อมูลถูกเก็บไว้นอกหน้าและคุณไม่สามารถสร้างดัชนีสำหรับคอลัมน์ VARCHAR (255) แต่สำหรับ VARCHAR (191) คุณสามารถทำได้ เป็นเพราะขนาดคอลัมน์ที่ทำดัชนีสูงสุดคือ 767 ไบต์สำหรับ ROW_FORMAT = COMPACT หรือ ROW_FORMAT = ซ้ำซ้อน

สำหรับรูปแบบแถวที่ใหม่กว่า ROW_FORMAT = DYNAMIC หรือ ROW_FORMAT = COMPRESSED (ซึ่งต้องใช้รูปแบบไฟล์ที่ใหม่กว่า innodb_file_format = Barracuda Antelope ที่เก่ากว่าไม่ได้) ขนาดคอลัมน์ที่มีการจัดทำดัชนีสูงสุดคือ 3072 มันมีให้ตั้งแต่ MySQL> = 5.6.3 เมื่อ innodb_large_prefix = 1 MySQL <= 5.7.6 และเปิดใช้งานโดยค่าเริ่มต้นสำหรับ MySQL> = 5.7.7) ดังนั้นในกรณีนี้เราสามารถใช้ VARCHAR (768) สำหรับ utf8mb4 (หรือ VARCHAR (1024) สำหรับ utf8 เก่า) สำหรับคอลัมน์ที่จัดทำดัชนี ตัวเลือก innodb_large_prefix เลิกใช้แล้วตั้งแต่ 5.7.7 เนื่องจากพฤติกรรมของมันมีอยู่แล้วภายใน MySQL 8 (ในเวอร์ชันนี้จะมีการลบตัวเลือกออก)


0

คุณต้องเปลี่ยนประเภทคอลัมน์เป็นvarcharหรือintegerสำหรับการจัดทำดัชนี


คุณอาจพิจารณาเพิ่มคำอธิบายและลิงค์ไปยังเอกสารประกอบ
LeeGee


-1

ใช้แบบนี้

@Id
@Column(name = "userEmailId", length=100)
private String userEmailId;

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