Mysql

在 MySQL 中儲存表情符號

  • May 17, 2021

我是 MySQL 數據庫的新手。我想將表情符號儲存在我的數據庫中。我的數據庫中已經有數據,我不想失去它。

我不知道使用 MySQL 控制台儲存 utf8mb4 字元集的正確方法。有沒有辦法使用 mysql-administrator 做到這一點?

mysql> SHOW VARIABLES LIKE "%version%";
+-------------------------+-----------------------+
| Variable_name           | Value                 |
+-------------------------+-----------------------+
| innodb_version          | 5.7.33                |
| protocol_version        | 10                    |
| slave_type_conversions  |                       |
| tls_version             | TLSv1,TLSv1.1,TLSv1.2 |
| version                 | 5.7.33-log            |

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR 
Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8               |
| character_set_connection | utf8               |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8               |
| character_set_server     | utf8               |
| character_set_system     | utf8               |
| collation_connection     | utf8_general_ci    |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8_general_ci    |
+--------------------------+--------------------+
10 rows in set (0.01 sec)

我將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

它沒有顯示錯誤,但也沒有儲存表情符號 - 當輸入表情符號時,它顯示為**?**這個問號。

我將utf-8編碼轉換為utf8mb4_general_ci

|--------------------------+--------------------|
| character_set_system     | utf8               |
|--------------------------+--------------------|
| collation_connection     | utf8mb4_general_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8_general_ci    |
|--------------------------+--------------------|

為您SHOW CREATE TABLE需要表情符號的一張桌子做。它可能在列上顯示“utf8”和/或表的預設值。列必須是utf8mb4.

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4;

會一味的把所有的列都改成utf8mb4。這可能是您需要的操作。

此外,連接需要指定 utf8mb4。由於我不知道您使用的是什麼客戶端,因此我無法提供具體資訊。如有必要,請在連接後立即執行:SET NAMES utf8mb4;

術語:

  • “字元集”,例如utf8或是字元utf8mb4編碼。這是您在儲存表情符號時遇到問題的地方。
  • “collat​​ion”是排序,比如’a’ < ‘b’ 是否有大小寫折疊使得’a’ = ‘A’。WHERE比較 ( ) 或排序 ( )時,排序規則可能很重要ORDER BY

引用自:https://dba.stackexchange.com/questions/291579