Tôi cố gắng lưu tên từ người dùng từ một dịch vụ trong cơ sở dữ liệu MySQL của tôi. Những tên này có thể chứa các biểu tượng cảm xúc như (chỉ dành cho các ví dụ)MySQL utf8mb4, Lỗi khi lưu biểu tượng cảm xúc
Sau khi tìm kiếm một chút, tôi đã tìm thấy số này stackoverflow liên kết đến số tutorial này. Tôi làm theo các bước và có vẻ như mọi thứ đều được cấu hình đúng cách.
Tôi có Cơ sở dữ liệu (bộ ký tự và tập hợp được đặt thành utf8mb4 (_unicode_ci)), một Bảng có tên TestTable, cũng được định cấu hình theo cách này, cũng như cột "Văn bản" được định cấu hình theo cách này (VARCHAR (191) utf8mb4_unicode_ci).
Khi tôi cố gắng tiết kiệm biểu tượng cảm xúc tôi nhận được một lỗi:
Example of error for shortcake():
Warning: #1300 Invalid utf8 character string: 'F09F8D'
Warning: #1366 Incorrect string value: '\xF0\x9F\x8D\xB0' for column 'Text' at row 1
Các chỉ Emoji mà tôi đã có thể tiết kiệm đúng cách được mặt trời ☀️
Mặc dù tôi đã không cố gắng tất cả trong số họ một cách trung thực.
Có điều gì tôi thiếu trong cấu hình không?
Xin lưu ý: Tất cả các thử nghiệm tiết kiệm không liên quan đến phía khách hàng. Tôi sử dụng phpmyadmin để tự thay đổi các giá trị và lưu dữ liệu. Vì vậy, cấu hình thích hợp của phía máy khách là một cái gì đó mà tôi sẽ chăm sóc sau khi máy chủ lưu các biểu tượng cảm xúc đúng cách.
Sidenote Một: Hiện nay, khi lưu biểu tượng cảm xúc tôi hoặc là nhận được lỗi như trên, hoặc không nhận được báo lỗi và các dữ liệu của Username
sẽ được lưu trữ như Username ????
. Lỗi hoặc không có lỗi phụ thuộc vào cách tôi lưu. Khi tạo/lưu thông qua câu lệnh SQL tôi lưu với dấu chấm hỏi, khi chỉnh sửa nội tuyến tôi lưu với dấu hỏi, khi chỉnh sửa bằng cách sử dụng nút chỉnh sửa, tôi nhận được lỗi.
cảm ơn bạn
EDIT 1: Được rồi vì vậy tôi nghĩ tôi phát hiện ra vấn đề, nhưng không phải là giải pháp. Dường như các biến cụ thể của Cơ sở dữ liệu không thay đổi đúng cách.
Khi tôi đăng nhập bằng root trên máy chủ của tôi và đọc ra các biến (toàn cầu):
Query sử dụng: 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)
Đối với cơ sở dữ liệu của tôi (trong phpmyadmin, cùng một truy vấn) có vẻ như sau:
+--------------------------+--------------------+
| 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 |
+--------------------------+--------------------+
Làm cách nào để điều chỉnh các cài đặt này trên cơ sở dữ liệu cụ thể? Ngoài ra, mặc dù tôi có cài đặt hiển thị đầu tiên làm mặc định, khi tạo cơ sở dữ liệu mới, tôi sẽ nhận được cài đặt thứ hai làm cài đặt.
** Edit 2: ""
Đây là my.cnf
tập tin của tôi:
[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/
đó là sự cố phpmyadmin, hãy thử ứng dụng khách mysql khác. – jsxqf
Tôi không nghĩ đó là vấn đề về phpmyadmin. Như bạn có thể thấy trong Edit1, tôi nghĩ rằng đó là một số cấu hình sai giữa các biến/tham số conf/mặc định và các biến trên cơ sở dữ liệu. Mặc dù khi tạo cơ sở dữ liệu mới. – Loki
'$ cfg [" DefaultCharset "]' trong cấu hình PMA của bạn là gì? – miken32