মাইএসকিউএল ত্রুটি: কী দৈর্ঘ্য ছাড়াই কী স্পেসিফিকেশন


363

আমার কাছে একটি প্রাইমারী কী সহ একটি টেবিল রয়েছে যা ভের্চার (255)। কিছু ক্ষেত্রে দেখা গেছে যেখানে 255 টি অক্ষর যথেষ্ট নয়। আমি ক্ষেত্রটি একটি পাঠ্যে পরিবর্তন করার চেষ্টা করেছি, তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

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

আমি এটা কিভাবে ঠিক করবো?

সম্পাদনা: আমার এই টেবিলটিতে একাধিক কলামের সমন্বিত প্রাথমিক কী রয়েছে তাও চিহ্নিত করা উচিত।


9
একটি টেবিলের একাধিক প্রাথমিক কী থাকতে পারে না। আপনি কী বোঝাতে চাইছেন এটিতে একটি যৌগিক প্রাথমিক কী আছে (এটি একাধিক কলাম সহ) বা এটিতে একাধিক UNIQUEকী রয়েছে?
কাসনসুই

1
আমার ক্ষেত্রে কোনও কারণে আমার ভিচারারের পরিবর্তে একটি ইমেল কলামের জন্য একটি পাঠ্য টাইপ ছিল।
ক্রিস

অনন্য বর্ণানুক্রমিক জন্য VARCHAR ব্যবহার করুন।
JWC মে

উত্তর:


571

ত্রুটিটি ঘটে কারণ মাইএসকিউএল কেবল কোনও বিএলএব বা TEXTকলামের প্রথম এন অক্ষরকে সূচক করতে পারে । ত্রুটি প্রধানত ঘটে তাই সেখানে এর একটি ক্ষেত্র / কলাম টাইপ যখন TEXTবা Blob বা অন্তর্গত সেই TEXTবা BLOBযেমন ধরনের TINYBLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, MEDIUMTEXT, এবং LONGTEXTযে আপনি একটি প্রাথমিক কী বা ইনডেক্স করতে চেষ্টা করুন। পূর্ণ BLOBবা TEXTদৈর্ঘ্যের মান ছাড়াই, মাইএসকিউএল পরিবর্তনশীল এবং গতিশীল আকারের কারণে কলামটির স্বতন্ত্রতার গ্যারান্টি দিতে অক্ষম। সুতরাং, ব্যবহারের সময় BLOBবা TEXTসূচক হিসাবে টাইপ করার সময়, এন এর মান সরবরাহ করতে হবে যাতে মাইএসকিউএল মূল দৈর্ঘ্য নির্ধারণ করতে পারে। যাইহোক, মাইএসকিউএল উপর একটি কী সময়ের সীমা সমর্থন করে না TEXTবা BLOBTEXT(88)কেবল কাজ করবে না।

ত্রুটি পপ আপ যখন আপনি একটি টেবিল কলাম থেকে রূপান্তর করতে চেষ্টা করবে non-TEXTএবং non-BLOBযেমন টাইপ VARCHARএবং ENUMমধ্যে TEXTবা BLOBকলাম ইতিমধ্যে অনন্য সীমাবদ্ধতার বা ইনডেক্স হিসেবে সংজ্ঞায়িত করা হয়েছে সঙ্গে, প্রকার। অল্টার টেবিল এসকিউএল কমান্ড ব্যর্থ হবে।

সমস্যার সমাধান হ'ল সূচি বা অনন্য বাধা থেকে কলামটি সরিয়ে ফেলা TEXTবা BLOBপ্রাথমিক কী হিসাবে অন্য ক্ষেত্র সেট করা। যদি আপনি এটি না করতে পারেন এবং এবং কলাম TEXTবা BLOBকলামে কোনও সীমা রাখতে চান, তবে VARCHARটাইপটি ব্যবহার করার চেষ্টা করুন এবং এতে দৈর্ঘ্যের একটি সীমা স্থাপন করুন। ডিফল্টরূপে, VARCHARসর্বাধিক 255 টি অক্ষরের মধ্যে সীমাবদ্ধ এবং এর সীমাটি তার ঘোষণার পরে একটি বন্ধনীটির মধ্যে স্পষ্টভাবে নির্দিষ্ট করা আবশ্যক, অর্থাৎ VARCHAR(200)এটি কেবল 200 টি অক্ষরে সীমাবদ্ধ থাকবে।

কখনও কখনও, যদিও আপনি আপনার টেবিলটিতে ব্যবহার না করেন TEXTবা BLOBসম্পর্কিত ধরণের ব্যবহার করেন না , ত্রুটি 1170 এও দেখা দিতে পারে। এটি এমন পরিস্থিতিতে ঘটে যখন আপনি VARCHARকলামটি প্রাথমিক কী হিসাবে নির্দিষ্ট করেন তবে ভুলভাবে তার দৈর্ঘ্য বা অক্ষরের আকার সেট করে। VARCHARকেবল 256 টির মতো অক্ষরই গ্রহণ করতে পারে, সুতরাং VARCHAR(512)মাইএসকিউএলকে VARCHAR(512)কোনও একটি SMALLTEXTডেটাটাইপে স্বয়ংক্রিয়ভাবে রূপান্তর করতে বাধ্য করবে , যা পরে কলামটি প্রাথমিক কী বা অনন্য বা অনন্য-অনন্য সূচক হিসাবে ব্যবহৃত হয় যদি মূল দৈর্ঘ্যে 1170 ত্রুটি দিয়ে ব্যর্থ হয়। এই সমস্যা সমাধানের জন্য, VARCHARক্ষেত্রের আকার হিসাবে 256 এর চেয়ে কম চিত্র নির্ধারণ করুন ।

তথ্যসূত্র: মাইএসকিউএল ত্রুটি 1170 (42000): কোনও মূল দৈর্ঘ্য ছাড়াই মূল স্পেসিফিকেশনে ব্যবহৃত ব্লব / পাঠ্য কলাম


13
dev.mysql.com/doc/refman/5.0/en/char.html "VARCHAR কলামের মানগুলি পরিবর্তনশীল-দৈর্ঘ্যের স্ট্রিং My মাইএসকিউএল 5.0.3 এর আগে দৈর্ঘ্য 0 থেকে 255 এবং 0 থেকে 65,535 এর মান হিসাবে নির্দিষ্ট করা যেতে পারে dev 5.0.3 এবং পরবর্তী সংস্করণগুলিতে My মাইএসকিউএল 5.0.3 এবং তার পরবর্তী সংস্করণে কার্যকর সর্বাধিক দৈর্ঘ্য সর্বাধিক সারি আকারের (65,535 বাইট, যা সমস্ত কলামের মধ্যে ভাগ করা হয়)
সাপেক্ষে

1
আপনি যেখানে বলছেন "মাইএসকিউএল কেবল কোনও বিএলএব বা পাঠ্য কলামের প্রথম এন অক্ষরকে সূচক করতে পারে", এন এর মান কত?
জামেসফিশার

2
"আপনি যখন কোনও বিএলওবি বা পাঠ্য কলামটি সূচনা করেন, আপনাকে অবশ্যই সূচকের জন্য একটি উপসর্গ দৈর্ঘ্য নির্দিষ্ট করতে হবে। dev.mysql.com/doc/refman/5.6/en/column-indexes.html
পিন্টো

86

আপনি যে TEXTকলামটির শীর্ষস্থানীয় অংশটি সূচী করতে চান তা নির্ধারণ করা উচিত ।

InnoDB768প্রতি সূচক কীতে বাইটের সীমাবদ্ধতা রয়েছে এবং আপনি এর চেয়ে বেশি সূচি তৈরি করতে সক্ষম হবেন না।

এটি ভাল কাজ করবে:

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বা MD5হ্যাশ হতে এবং এটি হিসাবে ব্যবহার করুন PRIMARY KEY


ঠিক আমি খুঁজছেন ছিল কি. ধন্যবাদ!
জোনাথন হিল

আকারটি (এখানে 255) বাইটগুলিতে না আসলে অক্ষরে রয়েছে? কারণ আমি ভাবতে পারি যে ইউটিএফ -8 এর জন্য অক্ষরগুলি ব্যবহার করা কোনও অতিরিক্ত সুবিধার জন্য সত্যিই জটিল হবে।
অ্যালেক্সিস উইলক

দুঃখিত, আমি আপনার প্রশ্ন অনুসরণ না। ডক্স থেকে: সূচক কী প্রিফিক্স দৈর্ঘ্য সীমা InnoDB টেবিল ব্যবহার জন্য 767 বাইট REDUNDANTবা COMPACTসারি বিন্যাস। উদাহরণস্বরূপ, যদি আপনি একটি বেশী 255 অক্ষরের একটি কলাম উপসর্গ সূচকের সাথে এই সীমা আঘাত পারে TEXTবা VARCHARকলাম, একটি utf8mb3 অক্ষর সেট এবং প্রতিটি অক্ষরের জন্য 3 বাইট সর্বাধিক অভিমানী। REDUNDANTএবং COMPACTশুধুমাত্র ফরম্যাটের সময় এই উত্তর দেওয়া হয়েছিল এ উপলব্ধ ছিল।
কাসনসুই

62

আপনি পরিবর্তিত সারণির অনুরোধে মূল দৈর্ঘ্য নির্দিষ্ট করতে পারেন, এরকম কিছু:

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

1
একই সমস্যাটি ঠিক করার জন্য আমার ঠিক এটিই ছিল । ধন্যবাদ!
পের ক্রেস্টেড আরনসন

2
আপনার এই পদ্ধতির সাথে খুব সতর্ক হওয়া উচিত! এটি সম্ভবত সবচেয়ে সহজ সমাধান, তবে অনেক পরিস্থিতিতে সবচেয়ে ভাল নয়। আপনার কীতে দুটি কলাম রয়েছে এবং কলাম ক্রম গুরুত্বপূর্ণ।
মিস্টার

এখানে সেরা উত্তর।
জর্জ চালাহাব

এটি আমার সমস্যা সমাধান করে, আপনাকে অনেক ধন্যবাদ!
22:39

22

একটি পূর্ণ মান সূচিবদ্ধ মাইএসকিউএল নামঞ্জুর করে BLOB, TEXTএবং দীর্ঘ VARCHARকলাম কারণ তথ্য সেগুলির মধ্যে উপস্থিত বিশাল হতে পারে, এবং পরোক্ষভাবে ডিবি সূচক বড় হবে, সূচী থেকে কোন সুবিধা, যার অর্থ।

মাইএসকিউএলকে প্রয়োজনীয় যে আপনি সূচীকরণের জন্য প্রথম এন অক্ষরগুলি সংজ্ঞায়িত করুন, এবং কৌশলটি এমন একটি এন নির্বাচন করা উচিত যা ভাল নির্বাচন করতে যথেষ্ট দীর্ঘ, তবে স্থান বাঁচাতে যথেষ্ট সংক্ষিপ্ত। আপনি পুরো কলামটি সূচিযুক্ত করে তুলতে সূচিটিকে প্রায় দরকারী হিসাবে উপস্থাপিত করতে যথেষ্ট দীর্ঘ হওয়া উচিত।

আরও এগিয়ে যাওয়ার আগে আসুন আমরা কয়েকটি গুরুত্বপূর্ণ পদ সংজ্ঞায়িত করি। ইনডেক্স সিলেক্টিভিটি মোট স্বতন্ত্র সূচকযুক্ত মান এবং সারির মোট সংখ্যার অনুপাত । পরীক্ষার সারণির জন্য এখানে একটি উদাহরণ রয়েছে:

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

আমরা যদি কেবলমাত্র প্রথম অক্ষরকে সূচী করি (এন = 1), তবে সূচীকরণ সারণী নিম্নলিখিত টেবিলের মতো দেখাবে:

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

এই ক্ষেত্রে, সূচী নির্বাচনটি IS = 1/3 = 0.33 এর সমান।

আসুন এখন দেখা যাক আমরা যদি সূচী অক্ষরের সংখ্যা দুটি (এন = 2) বৃদ্ধি করি তবে কী হবে।

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

এই দৃশ্যে আইএস = 2/3 = 0.66 যার অর্থ আমরা সূচকের নির্বাচনকে বাড়িয়েছি, তবে আমরা সূচকের আকারও বাড়িয়েছি। কৌশলটি হ'ল ন্যূনতম সংখ্যা 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 সংখ্যা বৃদ্ধি করতে হবে।

এখানে এন = 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    |
+-----+-----------+

এখানে এন = 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 টি বাইট (বা শেষ নামটিতে ইউটিএফ 8 অক্ষর থাকলে বেশি) সংরক্ষণ করেছি। এই টেবিলটিতে 1679 স্বতন্ত্র মানগুলি 6 বাইট দ্বারা গুণিত হয় প্রায় 9KB, এবং আমাদের টেবিলটিতে কয়েক মিলিয়ন সারি থাকে তবে এই সংখ্যাটি কীভাবে বাড়বে তা কল্পনা করুন।

আপনি আমার পোস্টে মাইএসকিউএলে প্রিফিক্সড ইনডেক্সগুলিতে এন নম্বর গণনা করার অন্যান্য উপায়গুলি পড়তে পারেন ।


3
এটি যথেষ্ট আপডেট করা হয়নি। আমি এটি গ্রহণযোগ্য উত্তরের চেয়ে বোঝা অনেক সহজ
বলে মনে করেছি

10

পাঠ্যের ধরণের কলামগুলির সাথে একটি সারণিতে সূচি যুক্ত করার সময় আমি এই ত্রুটিটি পেয়েছি। প্রতিটি পাঠ্য টাইপের জন্য আপনি যে আকারের পরিমাণটি ব্যবহার করতে চান তা আপনাকে ঘোষণা করতে হবে।

প্রথম পরিমাণের মধ্যে আকারের পরিমাণ রাখুন ()

যদি খুব বেশি বাইট ব্যবহার করা হয় তবে আপনি ইনডেক্সিংয়ের জন্য ব্যবহৃত পরিমাণ হ্রাস করতে ভারচরের জন্য বন্ধনীগুলিতে একটি আকার ঘোষণা করতে পারেন। আপনি যদি ইতিমধ্যে ভারচর (1000) এর মতো কোনও আকারের জন্য আকার ঘোষণা করেন তবে এটি এটি। অন্যরা যেমন বলেছে আপনাকে নতুন টেবিল তৈরি করার দরকার নেই।

সূচক যুক্ত করা হচ্ছে

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

অনন্য সূচক যুক্ত করা হচ্ছে

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

সহজ উত্তর আমি বিশ্বাস করি এবং এটি সরাসরি আমার জন্য কাজ করে। ধন্যবাদ।
ম্যাট ক্রিমেন্স


4

এর সাথে মোকাবিলার আর একটি দুর্দান্ত উপায় হ'ল অনন্য প্রতিবন্ধকতা ছাড়াই আপনার পাঠ্য ক্ষেত্রটি তৈরি করা এবং একটি ভাইব্র্যাচ ভিআচআরএআর ফিল্ড যুক্ত করা যা অনন্য এবং এতে পাঠ্য ক্ষেত্রের ডাইজেস্ট (MD5, SHA1 ইত্যাদি) থাকে। পুরো পাঠ্য ক্ষেত্রের উপর ডাইজেস্ট গণনা করুন এবং সংরক্ষণ করুন যখন আপনি পাঠ্য সারণিটি সন্নিবেশ করান বা আপডেট করেন তখন আপনার পুরো টেক্সট ক্ষেত্রের (কিছু শীর্ষস্থানীয় অংশের চেয়ে) আলাদা আলাদা সীমাবদ্ধতা থাকে যা দ্রুত অনুসন্ধান করা যায়।


1
আপনার সম্পূর্ণ "এলোমেলো" স্ট্রিং যেমন এমডি 5 (), এসএএএ 1 (), বা ইউইউডি () দ্বারা উত্পাদিত হওয়া সম্পর্কেও খুব সতর্ক হওয়া উচিত। আপনি তাদের সাথে উত্পন্ন প্রতিটি নতুন মান একটি বড় জায়গাতে যথেচ্ছ উপায়ে বিতরণ করা হবে, যা INSERT এবং কিছু ধরণের নির্বাচন
প্রশ্নকে

2
অ-দূষিত ডেটার উপর এমডি 5, এসএএএ 1 বিতরণ সমান হওয়া উচিত --- হ্যাশগুলির জন্য এটি।
জেবি।

আপনি কিছু উদাহরণ দিতে পারলে এটি দুর্দান্ত হবে।
ওয়েবকোমার

3

প্রাথমিক কী হিসাবে দীর্ঘ মান নেই। এটি আপনার অভিনয়কে নষ্ট করবে। মাইএসকিএল ম্যানুয়াল, বিভাগ 13.6.13 'ইনোডিবি পারফরম্যান্স টিউনিং এবং ট্রাবলশুটিং' দেখুন।

পরিবর্তে, প্রাথমিক হিসাবে অটো (সংযোজন সহ) একটি সরোগেট ইন্ট কী এবং একটি গৌণ ইউনিক্যু হিসাবে আপনার লং কী রয়েছে।


2

255 অক্ষর পর্যাপ্ত না হলে ওভারফ্লোটি ধরে রাখতে আরেকটি varChar (255) কলাম (খালি স্ট্রিং নাল নয়) যুক্ত করুন এবং উভয় কলাম ব্যবহার করতে এই পিকে পরিবর্তন করুন। এটি কোনও ভাল ডিজাইন করা ডেটাবেস স্কিমার মতো শোনাচ্ছে না, এবং আমি আরও সাধারণীকরণের জন্য এটির পুনঃনির্ধারণের দিকে দৃষ্টিভঙ্গি সহ কী আছে তা দেখার জন্য একটি ডেটা মডেলার পাওয়ার পরামর্শ দেব।


2

সমস্যার সমাধান হ'ল আপনার CREATE TABLEবিবৃতিতে, আপনি কোনও ক্ষেত্রের জন্য অক্ষরের দৈর্ঘ্য UNIQUE ( problemtextfield(300) )নির্দিষ্ট করতে কলাম তৈরির সংজ্ঞা দেওয়ার পরে সীমাবদ্ধতা যুক্ত করতে পারেন । তারপরে ক্ষেত্রের প্রথম অক্ষরগুলি অনন্য হতে হবে এবং তার পরে যে কোনও পার্থক্য উপেক্ষা করা হবে।key300TEXT300problemtextfield TEXT


1

এছাড়াও, আপনি যদি এই ক্ষেত্রে সূচকটি ব্যবহার করতে চান তবে আপনার মাইএসএএম স্টোরেজ ইঞ্জিন এবং ফুলটেক্সট সূচক প্রকারটি ব্যবহার করা উচিত।


আপনি ব্যাখ্যা এবং ডকুমেন্টেশনের লিঙ্ক যুক্ত বিবেচনা করতে পারেন।
লিগি

1

কেউ এখনও অবধি এটি উল্লেখ করেনি ... utf8mb4 দিয়ে যা 4-বাইট এবং ইমোটিকনগুলিও সঞ্চয় করতে পারে (আমাদের আর কখনও 3-বাইট utf8 ব্যবহার করা উচিত নয়) এবং আমরা ত্রুটিগুলি এড়াতে Incorrect string value: \xF0\x9F\x98\...পারি যেমন আমাদের সাধারণত ভিচারার (255) ব্যবহার করা উচিত নয়, বরং ভিচারার ( 191) কারণ utf8mb4 এবং VARCHAR (255) ক্ষেত্রে একই অংশের ডেটা অফ পৃষ্ঠায় সঞ্চিত থাকে এবং আপনি VਸਾਰAR (255) কলামের জন্য সূচক তৈরি করতে পারবেন না তবে Vर्चার (191) এর জন্য আপনি পারেন। এটি হ'ল ROW_FORMAT = COMPACT বা ROW_FORMAT = REDUNDANT এর জন্য সর্বাধিক সূচকযুক্ত কলামের আকার 767 বাইট।

নতুন সারি বিন্যাসগুলির জন্য ROW_FORMAT = DYNAMIC বা ROW_FORMAT = সংক্ষেপিত (যার জন্য নতুন ফাইল ফর্ম্যাট আনোডব_ফিল_ফর্ম্যাট = ব্যারাকুডা পুরানো অ্যান্টেলোপের নয়) সর্বাধিক ইনডেক্সড কলামের আকার 3072 It মাইএসকিউএল> = 5.6.3 থেকে পাওয়া যায় যখন জন্মগতভাবে অক্ষম = 1 মাইএসকিউএল <= 5.7.6 এবং মাইএসকিউএল> = 5.7.7 এর জন্য ডিফল্টরূপে সক্ষম হয়েছে)। সুতরাং এক্ষেত্রে আমরা সূচকযুক্ত কলামের জন্য utf8mb4 (অথবা পুরানো utf8 এর জন্য VARCHAR (1024)) জন্য VARCHAR (768) ব্যবহার করতে পারি। অপশন ইনোডব_লাজ_প্রিফিক্স 5.7.7 সাল থেকে অবচিত করা হয়েছে কারণ এর আচরণটি মাইএসকিউএল 8 বিল্ট-ইন রয়েছে (এই সংস্করণে বিকল্পটি সরানো হয়েছে)।


0

আপনাকে ইনডেক্স করার জন্য varcharবা কলামের ধরণের পরিবর্তন করতে হবে integer


আপনি ব্যাখ্যা এবং ডকুমেন্টেশনের লিঙ্ক যুক্ত বিবেচনা করতে পারেন।
লিগি


-1

এই মত ব্যবহার করুন

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

আপনি ব্যাখ্যা এবং ডকুমেন্টেশনের লিঙ্ক যুক্ত বিবেচনা করতে পারেন।
লিগি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.