দয়া করে ব্যাখ্যা করুন কীভাবে ওয়ার্ডপ্রেস মাইএসকিউএল অক্ষর সেট এবং কম স্তরে কোলিশনে কাজ করে


10

প্রশ্নের শিরোনামের পরামর্শ অনুসারে, আমি ওয়ার্ডপ্রেস কীভাবে মাইএসকিউএল অক্ষর সেট এবং কোলেশন বিকল্পগুলির সাথে কাজ করে তা বুঝতে খুঁজছি। আমি নীচে দেখাবো, জিনিসগুলি আমার কাছে খুব বেশি বোঝায় না ...

আমি তাদের ইনস্টলেশন পৃষ্ঠায় দেওয়া নির্দেশাবলী অনুসরণ করে ওয়ার্ডপ্রেস ইনস্টল করেছি:

https://codex.wordpress.org/Installing_WordPress

নির্দেশাবলীর অংশ হিসাবে, আমি কমান্ডলাইনে মাইএসকিউএল ডাটাবেসটি হ'ল কমান্ডগুলিতে ম্যানুয়াল তৈরির জন্য তাদের পরামর্শ অনুসরণ করেছি:

mysql> CREATE DATABASE databasename;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"hostname"
-> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT

আরও, নির্দেশ হিসাবে, আমি ইউটিএফ -8 অক্ষর সেট ব্যবহার করতে "wp-config.php" ফাইলটি সম্পাদনা করেছি:

define( 'DB_CHARSET', 'utf8' );

... এবং কোলেশন সেটিংসটি ফাঁকা রেখে গেছে:

define( 'DB_COLLATE', '' );

এখানেই মজা শুরু হয় ...

  1. আমি যদি এমন কোনও অক্ষর লিখি যা মাইএসকিউএল ইউটিএফ -8-এর অংশ নয়, তবে কোনও পোস্টে ইউটিএফ -8 এমবি 4, যেমন 𝌆 এর অংশ, এটি রেন্ডার পৃষ্ঠায় সঠিকভাবে প্রদর্শিত হয়। আমি এটি না হওয়ার আশা করতাম, যেহেতু আমি চরিত্রটি সেটটি ইউটিএফ -8 এমবি 4 তে সেট করে নেই, তবে আরও সীমাবদ্ধ ইউটিএফ -8 (অবশ্যই মাইএসকিউএল দ্বারা সংজ্ঞায়িত, সাধারণভাবে বোঝা যায়নি)।

  2. আমি যদি কমান্ডলাইনে মাইএসকিউএলে সমস্যাটি তদন্ত করি, তবে এটি আরও জটিল হয়। আমি যদি চালনা করি তবে আমি show variables like 'char%';এই প্রতিক্রিয়াটি পেয়েছি:

    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

আমি আশা করি ডাটাবেস অক্ষরটি ইউটিএফ -8 হবে, লাতিন 1 নয়।

  1. আমি যদি কমান্ডটি চালিত করি show variables like 'collation%';তবে আউটপুটটি হ'ল:

    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | utf8_general_ci   |
    | collation_database   | latin1_swedish_ci |
    | collation_server     | latin1_swedish_ci |
    +----------------------+-------------------+

এটি এমনকি অপরিচিত, সুস্পষ্ট কারণে (কোনও ইউটিএফ -8 ডাটাবেসে ডিফল্ট লাটিন 1_সুইডিজ_সি কোলেশন আশা করে না)।

  1. শেষ পর্যন্ত, যদি আমি চালিত হয় show full columns from mywpdatabase.wp_posts;, আউটপুট লাইনগুলি, যেখানে মান NULL নয়, কোলেশন হতে হবে তা দেখান:

| post_content_filtered | longtext | utf8mb4_unicode_ci |

আমার প্রশ্ন তখন - এটি কীভাবে ব্যাখ্যা করা যায়? যখন কনফিগারেশনে ডাটাবেসটি ইউটিএফ -8 হিসাবে সংজ্ঞায়িত করা হয়েছে তখন কেন আমার ওয়ার্ডপ্রেসটি সঠিকভাবে ইউটিএফ -8 এমবি 4 অক্ষর সরবরাহ করে? এবং মাইএসকিউলে ডাটাবেসটি ইউটিএফ -8 এর পরিবর্তে ল্যাটিন 1, সুইডিশ কোলেশন হিসাবে দেখাচ্ছে? এবং কীভাবে আসবে, এত কিছুর পরেও, টেবিলের পৃথক ক্ষেত্রগুলি utf8mb4_unicode_ci? ওয়ার্ডপ্রেস যেভাবে মাইএসকিউএল নিয়ে কাজ করে তার একটি নিম্ন স্তরের ব্যাখ্যা খুব সহায়ক হবে। ধন্যবাদ!

উত্তর:


11

ওয়ার্ডপ্রেস ওয়েবসাইটের wp-config.php এ দুটি সংজ্ঞা দেওয়া আছে:

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

বেশ কয়েকটি জিনিস রয়েছে যা সবচেয়ে বেশি বোঝা যায় tood এই সংজ্ঞায়িতগুলির মধ্যে ধ্রুবকের নামগুলি সম্ভবত সেগুলি ডাটাবেসের সাথে সম্পর্কিত হতে পারে। তারা না. তারা ডাটাবেসের মধ্যে সারণী সম্পর্কিত।

ডাটাবেস তৈরি টেবিল তৈরি থেকে সম্পূর্ণ স্বাধীন। ওয়ার্ডপ্রেস একটি ডেটাবেস তৈরি করে না এবং এটি ডাটাবেসের সাথে সংযোগ করতে পারে ততক্ষণ ডাটাবেসের ডিফল্ট অক্ষর সেট এবং কোলেশন সম্পর্কে চিন্তা করে না।

প্রথম সংজ্ঞায়িত 'utf8' মানটির অর্থ, 'utf8' পরিবার থেকে সর্বনিম্ন সীমাবদ্ধ অক্ষর সেট করা হয় যা হয় 'utf8' বা 'utf8mb4'।

যদি আপনি উপরে পরিবর্তিত সংজ্ঞাগুলি ছেড়ে যান, আপনার ওয়েবসাইটটি ইনস্টল করার চেষ্টা করার আগে, এটি ওয়ার্ডপ্রেসকে নিজস্ব পছন্দগুলি করতে বলার মতো, যা ডাটাবেসের টেবিলের চরিত্র সেট এবং কোলেশন সম্পর্কিত, যা মাইএসকিউএল দ্বারা সমর্থিত (মাইএসকিউএল সংস্করণ অনুসারে) এবং কমপক্ষে সীমাবদ্ধ থাকে।

ওয়ার্ডপ্রেসটি ইনস্টলেশনের সময় এর পছন্দগুলি নির্ধারণ করার জন্য বিশ্লেষণ করে:

  • মাইএসকিউএল এর সংস্করণ
  • ডাটাবেসের কোলেশন (wp-config.php এ)

মাইএসকিউএল এর সংস্করণের ভিত্তিতে, ওয়ার্ডপ্রেস সিদ্ধান্ত নিয়েছে, কোন গ্রুপটি ইউটিএফ 8 ব্যবহার করবে। দুটি আছে তাদের নাম দ্বারা পৃথক: utf8 এবং utf8mb4Utf8 গোষ্ঠী থেকে অক্ষর সেট , সর্বোচ্চ 3-বাইট দীর্ঘ অক্ষর সংরক্ষণ করার অনুমতি দেয়। Utf8mb4 গোষ্ঠী থেকে অক্ষর সেট , সর্বাধিক 4-বাইট দীর্ঘ অক্ষর সংরক্ষণের অনুমতি দেয়।

এখন, ওয়ার্ডপ্রেস DB_COLLATE সংজ্ঞায়নের মান পরীক্ষা করে । খালি থাকলে, এটি নির্বাচিত utf8 পরিবার থেকে কমপক্ষে সীমাবদ্ধ কোলেশন ব্যবহার করবে, অন্যথায়, নির্দিষ্ট মানটি ব্যবহার করবে।

উদাহরণ

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

মাইএসকিউএল যদি utf8mb4 (পুরানো সংস্করণ) সমর্থন না করে তবে সারণী অক্ষর সেটটি utf8 হবে এবং সমষ্টিটি হবে utf8_general_ci । অন্যথায়, আমরা যথাক্রমে utf8mb4 এবং utf8mb4_unicode_520_ci , বা utf8mb4_unicode_ci (মাইএসকিউএল সংস্করণ নির্ভর) আশা করতে পারি ।

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', 'utf8_polish_ci');

পুরানো মাইএসকিউএল সংস্করণ - utf8 এবং utf8_polish_ci । নতুন মাইএসকিউএল সংস্করণ - utf8mb4 এবং utf8mb4_polish_ci ( _পোলিশ_সি প্রত্যয়টি সম্মানিত)

define('DB_CHARSET', 'cp1250');
define('DB_COLLATE', 'cp1250_polish_ci');

যে কোনও মাইএসকিউএল সংস্করণ - সিপি 1250 এবং সিপি 1250_polish_ci

define('DB_CHARSET', 'cp1250');
define('DB_COLLATE', 'utf8_general_ci');

যে কোনও মাইএসকিউএল সংস্করণ - ত্রুটি (চরিত্রের সেট এবং কোলিশনের মিল নেই)

সারসংক্ষেপ

বেশিরভাগ ক্ষেত্রে, সংজ্ঞায়িত মানগুলি উপরে বর্ণিত, উপরে বর্ণিত, অপরিবর্তিত রাখা ভাল পছন্দ। তবে, আপনি যদি নিজের ওয়েবসাইটের ভাষার সাথে মেলে টেবিলের সমষ্টি চান তবে আপনি DB_COLLATE সংজ্ঞায়নের মানটি যথাযথভাবে সংশোধন করতে পারেন (উদাহরণস্বরূপ - utf8mb4_polish_ci )।

দ্রষ্টব্য: এটি ব্যাখ্যা করে, কেন the চরিত্রটি সঠিকভাবে সংরক্ষণ এবং পুনরুদ্ধার করা হয়েছিল। সহজভাবে, আপনার টেবিলের অক্ষর সেটটি ইউটিএফ 8 এমবি 4 গ্রুপের, ইউটিএফ 8 নয় ।


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

আমি আমার উত্তর আপডেট করব, আরও পরিষ্কারভাবে প্রক্রিয়াটি ব্যাখ্যা করার জন্য।
ফ্রাঙ্ক পি। ভ্যালেন্টইনউইচজ

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

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