ไดเรกทอรีบทความ
หากนิพจน์ Emoji ถูกเก็บไว้ในการเข้ารหัส utf8ฐานข้อมูล MySQLหรือ MariaDB ไม่สามารถแสดงได้
เหตุใดนิพจน์ Emoji ที่ป้อนลงในฐานข้อมูลจึงกลายเป็นอักขระเครื่องหมายคำถาม
เนื่องจากนิพจน์ Emoji เป็นอักขระ 4 ไบต์ และชุดอักขระ utf8 รองรับเฉพาะอักขระ 1-3 ไบต์ นิพจน์ Emoji จึงไม่สามารถเขียนลงในฐานข้อมูลได้
วิธีแก้ปัญหาที่นิพจน์ Emoji ที่ป้อนลงในฐานข้อมูลกลายเป็นอักขระเครื่องหมายคำถาม?
มี 2 โซลูชั่น:
- ป้อนข้อความด้วยตนเอง แทนที่อักขระสี่ไบต์ด้วยอักขระที่กำหนดเอง
- แก้ไข MySQL ชุดอักขระฐานข้อมูล เปลี่ยนชุดอักขระฐานข้อมูลจาก 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 คุณสามารถแทรกนิพจน์ภาษาจีนและอิโมจิได้
วิธีแก้ปัญหาอักขระ MySQL Emoji
ขั้นตอนที่ 1:แก้ไขไฟล์การกำหนดค่า MySQL my.cnf
- (เซิร์ฟเวอร์ Windows คือ 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+
หวัง Chen Weiliang บล็อก ( https://www.chenweiliang.com/ ) แชร์ "จะบันทึก Emoji ลงใน MySQL ได้อย่างไร เข้าสู่ฐานข้อมูล ปัญหาอักขระเครื่องหมายคำถามนิพจน์ Emoji" ซึ่งเป็นประโยชน์กับคุณ
ยินดีต้อนรับสู่การแบ่งปันลิงค์ของบทความนี้:https://www.chenweiliang.com/cwl-26592.html
ยินดีต้อนรับสู่ช่อง Telegram ของบล็อกของ Chen Weiliang เพื่อรับข่าวสารล่าสุด!
📚 คู่มือนี้มีคุณค่ามหาศาล 🌟 นี่เป็นโอกาสที่หายาก อย่าพลาด! ⏰⌛💨
แชร์และชอบถ้าคุณชอบ!
การแบ่งปันและไลค์ของคุณเป็นแรงจูงใจอย่างต่อเนื่องของเรา!