MySQL utf8mb4,保存表情符號時出錯 [英] MySQL utf8mb4, Errors when saving Emojis
問題描述
我嘗試在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屋!