MySQL utf8mb4,保存表情符號時出錯 [英] MySQL utf8mb4, Errors when saving Emojis

查看:0
本文介紹了MySQL utf8mb4,保存表情符號時出錯的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我嘗試在MySQL數據庫中保存來自服務的用戶的姓名。這些名稱可以包含????????等表情符號(僅供參考)

搜索了一下后,我發現這個stackoverflow鏈接到這個tutorial。我按照步驟操作,看起來一切都配置正確。

我有一個數據庫(字符集和排序規則設置為utf8mb4(_Unicode_Ci)),一個名為TestTable的表,也是這樣配置的,還有一個"文本"列,也是這樣配置的(VARCHAR(191)utf8mb4_unicode_ci)。

當我嘗試保存emoji時,收到錯誤:

Example of error for shortcake (??):
    Warning: #1300 Invalid utf8 character string: 'F09F8D'
    Warning: #1366 Incorrect string value: 'xF0x9Fx8DxB0' for column 'Text' at row 1

我唯一能夠正確保存的表情符號是SUN??

老實說,我并沒有全部試過。

我是否在配置中遺漏了什么?

請注意:所有保存測試都不涉及客戶端。我使用phpmyadmin手動更改這些值并保存數據。因此,客戶端的正確配置是服務器正確保存emoji之后我要處理的事情。

另一個符號:目前,保存表情包時,我要么得到類似上面的錯誤,要么沒有得到錯誤,Username ??的數據將被存儲為Username ????。錯誤或無錯誤取決于我保存的方式。當通過SQL語句創建/保存時,我使用問號保存,當編輯內聯時,我使用問號保存,當使用編輯按鈕編輯時,我收到錯誤。

謝謝

編輯1: 好吧,我想我發現了問題,但沒有找到解決方案。 數據庫特定變量似乎未正確更改。

在服務器上以超級用戶身份登錄并讀出變量(全局)時:
使用的查詢: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 |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

對于我的數據庫(在phpmyadmin中,相同的查詢),它如下所示:

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8               |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8               |
| character_set_server     | utf8               |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
如何調整特定數據庫上的這些設置? 此外,即使我將第一個顯示的設置作為默認設置,在創建新數據庫時,我也會將第二個設置作為設置。

編輯2:

這是我的my.cnf文件:

[client]
port=3306
socket=/var/run/mysqld/mysqld.sock
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log_error=/var/log/mysql/error.log
max_connections=200
max_user_connections=30
wait_timeout=30
interactive_timeout=50
long_query_time=5
innodb_file_per_table
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

!includedir /etc/mysql/conf.d/

推薦答案character_set_client、_connection_results必須全部utf8mb4才能食用。

某些東西,在某個地方,正在單獨設置這些元素的子集。檢查my.cnf和phpmyadmin的設置--沒有同時設置這三個文件。

如果執行SET NAMES utf8mb4,則所有三個設置都正確。

陽光普照是因為它只有3字節-E2 98 80;UTF8對于Unicode字符的3字節UTF8編碼已經足夠了。

這篇關于MySQL utf8mb4,保存表情符號時出錯的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!

查看全文
登錄 關閉
掃碼關注1秒登錄
發送“驗證碼”獲取 | 15天全站免登陸
全免费A级毛片免费看无码播放