คำถามนี้มีคำตอบอยู่แล้วจำนวนมาก แต่ Mathias Bynens กล่าวว่าควรใช้ 'utf8mb4' แทน 'utf8' เพื่อให้รองรับ UTF-8 ได้ดีกว่า ('utf8' ไม่สนับสนุนอักขระ 4 ไบต์ฟิลด์จะถูกตัดทอนเมื่อแทรก ) ฉันคิดว่านี่เป็นความแตกต่างที่สำคัญ ดังนั้นนี่คือคำตอบอีกวิธีในการตั้งค่าชุดอักขระเริ่มต้นและการเรียงชุดอักขระ หนึ่งที่จะช่วยให้คุณใส่กองปู (💩)
สิ่งนี้ใช้ได้กับ MySQL 5.5.35
โปรดทราบว่าการตั้งค่าบางอย่างอาจเป็นตัวเลือก ในขณะที่ฉันไม่แน่ใจว่าฉันไม่ได้ลืมอะไรเลยฉันจะตอบคำถามนี้เป็นวิกิชุมชน
การตั้งค่าเก่า
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| 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 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
การกำหนดค่า
# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
การตั้งค่าใหม่
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES 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 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
character_set_system เป็น utf8
สิ่งนี้จะไม่มีผลกับตารางที่มีอยู่ แต่เป็นเพียงการตั้งค่าเริ่มต้น (ใช้สำหรับตารางใหม่) รหัส ALTERต่อไปนี้สามารถใช้เพื่อแปลงตารางที่มีอยู่ (โดยไม่มีวิธีแก้ไขปัญหาการถ่ายโอนข้อมูลคืนค่า):
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
แก้ไข:
บนเซิร์ฟเวอร์ MySQL 5.0: character_set_client, character_set_connection, character_set_results, collation_connection ยังคงอยู่ที่ latin1 การออกSET NAMES utf8
(utf8mb4 ไม่มีในรุ่นนั้น) ตั้งค่าเป็น utf8 เช่นกัน
ข้อแม้ : หากคุณมีตาราง utf8 ที่มีคอลัมน์ดัชนีประเภท VARCHAR (255) จะไม่สามารถแปลงได้ในบางกรณีเนื่องจากความยาวสูงสุดของคีย์เกิน ( Specified key was too long; max key length is 767 bytes.
) ถ้าเป็นไปได้ลดขนาดคอลัมน์จาก 255 เป็น191 (เพราะ 191 * 4 = 764 <767 <192 * 4 = 768) หลังจากนั้นสามารถแปลงตารางได้
utf8mb4
คือ UTF-8 ที่แท้จริงพร้อมการสนับสนุน Unicode แบบเต็ม ดูวิธีการสนับสนุนเต็มรูปแบบ Unicode ในฐานข้อมูล