Cerco di salvare i nomi degli utenti da un servizio nel mio database MySQL. Quei nomi possono contenere emoji come (solo per esempi)MySQL utf8mb4, Errori durante il salvataggio di Emojis
Dopo aver cercato un po 'ho trovato questo collegamento stackoverflow a questo tutorial. Ho seguito i passaggi e sembra che tutto sia configurato correttamente.
Ho un database (charset e collation impostato utf8mb4 (_unicode_ci)), una tabella denominata TestTable, anche configurato in questo modo, così come una colonna "Testo", configurato in questo modo (VARCHAR (191) utf8mb4_unicode_ci).
Quando cerco di salvare emoji ottengo un errore:
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
L'unica Emoji che ero in grado di salvare correttamente è stato il sole ☀️
Anche se non ho provato tutti loro Ad essere onesti.
C'è qualcosa che mi manca nella configurazione?
Nota: Tutti i test di risparmio non hanno riguardato un client. Io uso phpmyadmin per modificare manualmente i valori e salvare i dati. Quindi la corretta configurazione del lato client è qualcosa che mi prenderò cura di dopo il il server salva correttamente gli emoji.
Un'altra Sidenote: Attualmente, quando si salvano emoji io o l'errore come sopra, o ottengo nessun errore ei dati di Username
saranno memorizzati come Username ????
. Errore o nessun errore dipende dal modo in cui io salvo. Quando creo/salvando tramite istruzione SQL, salvi con i punti interrogativi, quando modifichi in linea salvi con i punti interrogativi, quando modifichi utilizzando il pulsante di modifica ottengo l'errore.
ringraziamento
EDIT 1: Va bene quindi penso che ho scoperto il problema, ma non la soluzione. Sembra che le variabili specifiche del database non siano state modificate correttamente.
Quando ho effettuato l'accesso come root sul mio server e leggere le variabili (globali):
query utilizzata: 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)
Per la mia base di dati (in phpMyAdmin, la stessa query) Sembra come il seguente:
+--------------------------+--------------------+
| 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 |
+--------------------------+--------------------+
Come posso regolare queste impostazioni sul database specifico? Anche se ho le prime impostazioni mostrate come predefinite, quando creo un nuovo database ottengo il secondo come impostazioni.
** Edit 2: ""
Ecco il mio my.cnf
di file:
[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/
è un problema phpmyadmin, prova altri client mysql. – jsxqf
Non penso che sia un problema phpmyadmin. Come puoi vedere in Edit1, penso che ci sia qualche errata configurazione tra le variabili/parametri di conf/default e quelli sul database. Anche se durante la creazione di un nuovo database. – Loki
Che cosa è '$ cfg [" DefaultCharset "]' nella configurazione PMA? – miken32