فهرست مقاله
اگر عبارت Emoji در رمزگذاری utf8 ذخیره شودپایگاه داده MySQLیا MariaDB، قابل نمایش نیست.
چرا عبارت Emoji وارد شده در پایگاه داده به یک کاراکتر علامت سوال تبدیل می شود؟
از آنجایی که عبارات Emoji کاراکترهای 4 بایتی هستند و مجموعه کاراکترهای utf8 تنها از 1-3 بایت کاراکتر پشتیبانی می کند، عبارات Emoji را نمی توان در پایگاه داده نوشت.
چگونه می توان این مشکل را حل کرد که عبارت Emoji وارد شده در پایگاه داده به یک کاراکتر علامت سوال تبدیل می شود؟
2 راه حل وجود دارد:
- متن را به صورت دستی وارد کنید و کاراکترهای چهار بایتی را با کاراکترهای سفارشی جایگزین کنید.
- تغییر خروجی مجموعه کاراکترهای پایگاه داده، مجموعه کاراکترهای پایگاه داده را از utf8 به utf8mb4 تغییر دهید، از کاراکترهای 1-4 بایتی پشتیبانی کنید.
در واقع روش اول کار زیاد است و توصیه نمی شود.
توصیه می شود از راه حل دوم استفاده کنید، مجموعه کاراکترهای پایگاه داده MySQL را اصلاح کنید.
با شروع از نسخه MySQL 5.5.3، پایگاه داده می تواند مجموعه کاراکترهای utf4mb8 4 بایتی را پشتیبانی کند و یک کاراکتر می تواند تا 4 بایت داشته باشد، بنابراین می تواند مجموعه کاراکترهای بیشتری را پشتیبانی کند و همچنین می تواند عبارات Emoji را ذخیره کند.
- پس از MySQL 5.5.3، اساساً می توانید به صورت یکپارچه به مجموعه کاراکترهای utf8mb4 ارتقا دهید.
- در عین حال، utf8mb4 با مجموعه کاراکترهای utf8 سازگار است.
- رمزگذاری، موقعیت و ذخیره کاراکترهای utf8 در utf8mb4 است.
- همانند مجموعه کاراکترهای utf8، هیچ آسیبی به داده های موجود نمی رسد.
به واسطهاز phpMyAdminبرای جداول تازه ایجاد شده در پایگاه داده تازه ایجاد شده، رمزگذاری کاراکترهای پیش فرض به صورت زیر است:Latin1
- این رمزگذاری نمی تواند عبارات چینی و ایموجی را وارد کند.
- شما باید رمزگذاری مجموعه کاراکتر مجموعه کاراکترهای پایگاه داده و جدول را به utf8mb4 تغییر دهید.
- سپس، MySQL را مجددا راه اندازی کنید، می توانید عبارات چینی و Emoji را وارد کنید.
حل مشکل کاراکتر Emoji MySQL
مرحله 1:فایل پیکربندی MySQL my.cnf را تغییر دهید
- (سرور ویندوز my.ini است،لینـوکــسسرور my.cnf است)
- فایل my.cnf، معمولا در
/etc/mysql/my.cnf
محل. - کنترل پنل CWPفایل my.cnf در است
/etc/my.cnf
محل.
پس از یافتن آن، لطفاً محتوای زیر را در سه قسمت ▼ اضافه کنید
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
مرحله 2:پایگاه داده MySQL را مجددا راه اندازی کنید
service mysqld restart
مرحله 3: مجموعه کاراکترها را دوباره بررسی کنید و ▼ را در خط فرمان SQL وارد کنید
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_database';
اگر ▼ زیر را بررسی کنید
دستور SQL زیر را وارد کنید ▼
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
بررسی کنید که آیا به صورت زیر است
+--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +--------------------------+--------------------+
پس از ایجاد یک پایگاه داده جدید در phpMyAdmin، بایدمشاهده کد پایگاه داده ▼
SHOW CREATE DATABASE db_name;
- 如:
SHOW CREATE DATABASE test;
اگر کدگذاری پایگاه داده نیستutf8mb4
، باید مجموعه کاراکتر پایگاه داده را تغییر دهیدutf8mb4
.
چگونه مجموعه کاراکتر پایگاه داده را به utf8mb4 تغییر دهیم؟
مرحله 1: روی نام پایگاه داده فعلی در phpMyAdmin کلیک کنید، سپس SQL را کلیک کنید.
مرحله 2: دستور زیر را وارد کنید تا مجموعه کاراکتر پایگاه داده را تغییر دهیدutf8mb4
▼
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8mb4
- 如:
ALTER DATABASE test DEFAULT CHARACTER SET utf8mb4;
مرحله 3:پایگاه داده MySQL را مجددا راه اندازی کنید
service mysqld restart
- خودشه.
در اینجا چند نمونه از دستورات SQL آورده شده است:
مجموعه کاراکترهای پیشفرض و تمام ستونهای کاراکتر جدول را به مجموعه کاراکتر جدید ▼ تغییر دهید
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
- 如:
ALTER TABLE logtest CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
اگر فقط مجموعه کاراکترهای پیش فرض جدول را تغییر دهید
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
- 如:
ALTER TABLE logtest DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci;
مجموعه کاراکترهای یک فیلد ▼ را تغییر دهید
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name
- 如:
ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
مشاهده کد جدول ▼
SHOW CREATE TABLE tbl_name;
مشاهده کدهای فیلد ▼
SHOW FULL COLUMNS FROM tbl_name;
مشاهده کد پایگاه داده فعلی ▼
SHOW VARIABLES LIKE 'character_set_%';
- بسته درایور mysql-connector-java فقط از utf5.1.13mb8 در نسخه 4+ پشتیبانی می کند.
وبلاگ امید چن ویلیانگ ( https://www.chenweiliang.com/ ) به اشتراک گذاشته شده "چگونه Emoji را در MySQL ذخیره کنیم؟ مشکل کاراکتر علامت سوال عبارت Emoji پایگاه داده" را وارد کنید، که برای شما مفید است.
به اشتراک گذاری لینک این مقاله خوش آمدید:https://www.chenweiliang.com/cwl-26592.html
به کانال تلگرام وبلاگ چن ویلیانگ خوش آمدید تا از آخرین به روز رسانی ها مطلع شوید!
📚 این راهنما حاوی ارزش بسیار زیادی است، 🌟این یک فرصت نادر است، آن را از دست ندهید! ⏰⌛💨
اگر دوست داشتید به اشتراک بگذارید و لایک کنید
اشتراک گذاری و لایک های شما انگیزه مستمر ما هستند!