utf8mb4
কোলেশনের সাথে অক্ষর সেট ব্যবহার করা ভাল utf8mb4_unicode_ci
।
অক্ষর সেট, utf8
কেবলমাত্র ইউটিএফ -8 কোড পয়েন্টের সম্ভাব্য অক্ষরের প্রায় 6% সমর্থন করে। utf8
কেবলমাত্র বেসিক বহুভাষিক প্লেন (বিএমপি) সমর্থন করে। সেখানে আরও 16 টি প্লেন রয়েছে। প্রতিটি বিমানের মধ্যে 65,536 টি অক্ষর রয়েছে। utf8mb4
সমস্ত 17 প্লেন সমর্থন করে।
মাইএসকিউএল 4 বাইট ইউটিএফ -8 অক্ষরগুলি কেটে ফেলবে যার ফলে ক্ষতিগ্রস্ত ডেটা হবে।
utf8mb4
অক্ষর সেট 2010-03-24 উপর মাইএসকিউএল 5.5.3 চালু করা হয়।
নতুন অক্ষর সেটটি ব্যবহার করতে প্রয়োজনীয় কিছু পরিবর্তন তুচ্ছ নয়:
- আপনার অ্যাপ্লিকেশন ডাটাবেস অ্যাডাপ্টারে পরিবর্তনগুলি করা দরকার হতে পারে।
- অক্ষর সেট সেট করা, কোলেশন এবং বারোডুডায় ইনোডাব_ফাইলে_ফর্ম্যাট পরিবর্তন সহ মাই সিএনএফ-তে পরিবর্তনগুলি করা দরকার
- এসকিউএল তৈরি বিবৃতি অন্তর্ভুক্ত করতে পারে:
ROW_FORMAT=DYNAMIC
- ডিআরএনমিক (VYCHAR) (192) এবং আরও বড় এর সূচকের জন্য প্রয়োজনীয়।
দ্রষ্টব্য: Barracuda
থেকে স্যুইচ Antelope
করার জন্য মাইএসকিউএল পরিষেবাটি একাধিকবার পুনরায় আরম্ভ করার প্রয়োজন হতে পারে। innodb_file_format_max
: হওয়া পর্যন্ত মাইএসকিউএল সেবার পুনরায় আরম্ভ করা হয়েছে পরিবর্তন করে না innodb_file_format = barracuda
।
মাইএসকিউএল পুরানো Antelope
InnoDB ফাইল ফর্ম্যাট ব্যবহার করে । Barracuda
ডায়নামিক সারি বিন্যাসকে সমর্থন করে, যা আপনি অক্ষরটিতে স্যুইচ করার পরে সূচি এবং কী তৈরির জন্য এসকিউএল ত্রুটিগুলি আঘাত করতে না চাইলে আপনার প্রয়োজন হবে:utf8mb4
- # 1709 - সূচী কলামের আকার খুব বড়। সর্বাধিক কলামের আকার 767 বাইট।
- # 1071 - নির্দিষ্ট কীটি দীর্ঘ ছিল; সর্বাধিক কী দৈর্ঘ্য 767 বাইট
নিম্নলিখিত পরিস্থিতিটি মাইএসকিউএল 5.6.17 এ পরীক্ষা করা হয়েছে: ডিফল্টরূপে, মাইএসকিউএল এভাবে কনফিগার করা হয়েছে:
SHOW VARIABLES;
innodb_large_prefix = OFF
innodb_file_format = Antelope
আপনার মাইএসকিউএল পরিষেবা বন্ধ করুন এবং আপনার বিদ্যমান মাই সিএনএফ এ বিকল্পগুলি যুক্ত করুন:
[client]
default-character-set= utf8mb4
[mysqld]
explicit_defaults_for_timestamp = true
innodb_large_prefix = true
innodb_file_format = barracuda
innodb_file_format_max = barracuda
innodb_file_per_table = true
# Character collation
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
এসকিউএল তৈরি বিবৃতি উদাহরণ:
CREATE TABLE Contacts (
id INT AUTO_INCREMENT NOT NULL,
ownerId INT DEFAULT NULL,
created timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
contact VARCHAR(640) NOT NULL,
prefix VARCHAR(128) NOT NULL,
first VARCHAR(128) NOT NULL,
middle VARCHAR(128) NOT NULL,
last VARCHAR(128) NOT NULL,
suffix VARCHAR(128) NOT NULL,
notes MEDIUMTEXT NOT NULL,
INDEX IDX_CA367725E05EFD25 (ownerId),
INDEX created (created),
INDEX modified_idx (modified),
INDEX contact_idx (contact),
PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB ROW_FORMAT=DYNAMIC;
- আপনি ক্রিয়েটিয়ান স্টেটমেন্ট থেকে অপসারণ করা
INDEX contact_idx (contact)
হলে # 1709 ত্রুটিটি দেখতে পাচ্ছেন ROW_FORMAT=DYNAMIC
।
দ্রষ্টব্য: সূচক পরিবর্তন করে প্রথম 128 টি অক্ষরের সীমাবদ্ধ করতে contact
ব্যারাকুডা ব্যবহারের প্রয়োজনীয়তা বাদ দেয়ROW_FORMAT=DYNAMIC
INDEX contact_idx (contact(128)),
এছাড়াও দ্রষ্টব্য: যখন এটি বলছে ক্ষেত্রের আকার, এটি VARCHAR(128)
128 বাইট নয়। আপনি 128, 4 বাইট অক্ষর বা 128, 1 বাইট অক্ষর ব্যবহার করতে পারেন।
এই INSERT
বিবৃতিতে 2 সারির 4 বাইট 'পু' অক্ষর থাকা উচিত:
INSERT INTO `Contacts` (`id`, `ownerId`, `created`, `modified`, `contact`, `prefix`, `first`, `middle`, `last`, `suffix`, `notes`) VALUES
(1, NULL, '0000-00-00 00:00:00', '2014-08-25 03:00:36', '1234567890', '12345678901234567890', '1234567890123456789012345678901234567890', '1234567890123456789012345678901234567890', '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678', '', ''),
(2, NULL, '0000-00-00 00:00:00', '2014-08-25 03:05:57', 'poo', '12345678901234567890', '💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩', '💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩', '💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩', '', ''),
(3, NULL, '0000-00-00 00:00:00', '2014-08-25 03:05:57', 'poo', '12345678901234567890', '💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩', '💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩', '123💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩', '', '');
last
কলামটি ব্যবহৃত স্থানের পরিমাণটি দেখতে পাবেন :
mysql> SELECT BIT_LENGTH(`last`), CHAR_LENGTH(`last`) FROM `Contacts`;
+--------------------+---------------------+
| BIT_LENGTH(`last`) | CHAR_LENGTH(`last`) |
+--------------------+---------------------+
| 1024 | 128 | -- All characters are ASCII
| 4096 | 128 | -- All characters are 4 bytes
| 4024 | 128 | -- 3 characters are ASCII, 125 are 4 bytes
+--------------------+---------------------+
আপনার ডাটাবেস অ্যাডাপ্টারে আপনি নিজের সংযোগের জন্য চরসেট এবং কোলেশন সেট করতে চাইতে পারেন:
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'
পিএইচপি-তে, এটির জন্য সেট করা হবে: \PDO::MYSQL_ATTR_INIT_COMMAND
তথ্যসূত্র: