- 1 1. Introduzione
- 2 2. Cause principali del testo giapponese corrotto
- 2.1 Perché MySQL non visualizza correttamente il giapponese?
- 2.2 Causa 1: Il set di caratteri predefinito rimane latin1
- 2.3 Causa 2: Mismatch del set di caratteri tra client e server
- 2.4 Causa 3: Impostazioni incoerenti di database, tabella e colonna
- 2.5 Riepilogo: la maggior parte dei problemi deriva da mismatch del set di caratteri
- 3 3. Come verificare le impostazioni del set di caratteri in MySQL
- 4 4. Come Configurare MySQL per Gestire Correttamente il Giapponese
- 4.1 Dì Addio al Mojibake con le Impostazioni Giuste
- 4.1.1 4.1 Configurazione Lato Client: Impostala Esplicitamente alla Connessione
- 4.1.2 ✅ Nota:
- 4.1.3 4.2 Configurazione Lato Server: Impostazioni Persistenti tramite my.cnf
- 4.1.4 ✅ Note Importanti:
- 4.1.5 4.3 Specificare i Set di Caratteri per Database e Tabelle
- 4.1.6 4.4 Set di Caratteri Consigliato: Perché utf8mb4?
- 4.1 Dì Addio al Mojibake con le Impostazioni Giuste
- 5 5. Gestione del giapponese in un ambiente Docker
- 6 6. Problemi comuni e come risolverli
- 6.1 Vedi ancora testo illeggibile dopo la configurazione? La causa potrebbe persistere
- 6.1.1 Problema 1: Le modifiche di configurazione non hanno effetto
- 6.1.2 Problema 2: Il giapponese appare illeggibile nel terminale
- 6.1.3 Problema 3: I database o le tabelle esistenti sono stati creati con latin1
- 6.1.4 Problema 4: Incoerenza della codifica dei caratteri in applicazioni PHP o Python
- 6.1.5 Problema 5: Testo corrotto durante l’importazione/esportazione di file CSV o Excel
- 6.2 Checklist completa di risoluzione dei problemi
- 6.1 Vedi ancora testo illeggibile dopo la configurazione? La causa potrebbe persistere
- 7 7. Conclusione
- 8 8. Domande frequenti (FAQ)
- 8.1 Domande comuni sul supporto MySQL per il giapponese
- 8.1.1 Q1. Il testo giapponese appare come “???”. Qual è la causa?
- 8.1.2 Q2. Ho impostato utf8mb4 in my.cnf, ma non viene applicato.
- 8.1.3 Q3. Le tabelle esistenti contengono giapponese corrotto. È possibile correggerle?
- 8.1.4 Q4. Uso MySQL in Docker e riscontro garbling giapponese.
- 8.1.5 Q5. Qual è la differenza tra utf8 e utf8mb4? Quale dovrei usare?
- 8.1.6 Q6. I file CSV esportati da Excel diventano corrotti. Cosa devo fare?
- 8.1 Domande comuni sul supporto MySQL per il giapponese
1. Introduzione
Hai problemi a gestire il giapponese in MySQL? Cause e soluzioni complete spiegate
MySQL è ampiamente usato come database per applicazioni web e WordPress. Tuttavia, ti è mai capitato di incontrare problemi come testo giapponese corrotto o caratteri visualizzati come “???”.
Questo problema si verifica frequentemente per i principianti e negli ambienti di sviluppo locale come XAMPP, MAMP o configurazioni virtualizzate come Docker. La causa principale è una configurazione errata della codifica dei caratteri in MySQL.
In questo articolo spieghiamo chiaramente come configurare correttamente MySQL per gestire il testo giapponese, insieme ai problemi più comuni e alle loro soluzioni.
Includiamo anche indicazioni pratiche per ambienti reali, come la configurazione di Docker, le impostazioni di my.cnf e la modifica di database esistenti. Questa guida è adatta sia ai principianti sia agli ingegneri professionisti.
Nella sezione successiva esamineremo la ragione fondamentale per cui i caratteri giapponesi diventano illeggibili.
2. Cause principali del testo giapponese corrotto
Perché MySQL non visualizza correttamente il giapponese?
Se il testo giapponese appare come “???” o simboli illeggibili in MySQL, la causa è quasi certamente impostazioni errate della codifica dei caratteri. MySQL è molto flessibile, ma se le impostazioni del set di caratteri e della collation non corrispondono, i dati non possono essere memorizzati e recuperati correttamente.
Di seguito le tre cause più comuni.
Causa 1: Il set di caratteri predefinito rimane latin1
Le versioni più vecchie di MySQL o le installazioni predefinite a volte usano latin1 (codifica per lingue dell’Europa occidentale). Poiché latin1 non può gestire correttamente il giapponese, i caratteri si corrompono al momento dell’inserimento. Questo significa che i dati sono già corrotti quando vengono salvati nel database.
Causa 2: Mismatch del set di caratteri tra client e server
MySQL gestisce la codifica dei caratteri in tre fasi:
- Durante la trasmissione dal client (
character_set_client) - Durante l’elaborazione lato server (
character_set_server) - Durante l’output dei risultati (
character_set_results)
Ad esempio, anche se il client utilizza utf8mb4, se il server elabora i dati come latin1 la corruzione avviene durante l’elaborazione. Questo mismatch è uno dei problemi più comuni.
Causa 3: Impostazioni incoerenti di database, tabella e colonna
Quando si creano nuove tabelle senza specificare esplicitamente un set di caratteri, MySQL applica la sua configurazione predefinita. Questo può portare a impostazioni incoerenti, ad esempio:
- Database:
utf8mb4 - Tabella:
utf8 - Colonna:
latin1
Tale incoerenza provoca testo corrotto durante la memorizzazione e la visualizzazione.
Riepilogo: la maggior parte dei problemi deriva da mismatch del set di caratteri
Nella maggior parte dei casi, il testo giapponese corrotto in MySQL è dovuto a set di caratteri configurati in modo non corrispondente. Nella sezione successiva spiegheremo come verificare le impostazioni attuali della codifica dei caratteri in MySQL. Una corretta verifica consente di identificare e risolvere rapidamente il problema.
3. Come verificare le impostazioni del set di caratteri in MySQL
Il primo passo per trovare la causa è controllare le impostazioni attuali
Quando MySQL non riesce a gestire correttamente il giapponese, la prima cosa da controllare sono le impostazioni attuali del set di caratteri e della collation.
In MySQL, più set di caratteri vengono scambiati tra client e server e devono corrispondere.
Qui spieghiamo come verificare queste impostazioni usando la riga di comando e le query SQL.
Controlla i set di caratteri con il comando SHOW VARIABLES
Mentre sei connesso a MySQL, esegui il seguente SQL per controllare la configurazione corrente del set di caratteri:
SHOW VARIABLES LIKE 'character_set%';
Dopo aver eseguito questo comando, otterrai un output simile al seguente:
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
+--------------------------+---------+
Cosa Significa Ogni Impostazione
| Setting | Meaning and Role |
|---|---|
character_set_client | The encoding of strings sent from the client |
character_set_connection | The character set used during client-to-server communication |
character_set_results | The character set used when query results are returned to the client |
character_set_database | The default character set of the currently selected database |
character_set_server | The default character set used when creating new databases and tables |
character_set_system | The character set used internally by the server (usually no need to change) |
In particolare, è fondamentale che character_set_client, character_set_connection e character_set_results corrispondano tutti. Se differiscono, le stringhe possono diventare corrotte quando vengono inviate o restituite.
Punti di Controllo per Prevenire Testi Illeggibili
- Conferma che tutti gli elementi siano impostati su
utf8mb4 - Se più set di caratteri sono mescolati, applica le modifiche di configurazione introdotte più avanti
- Attenzione: tabelle e colonne possono avere impostazioni di set di caratteri proprie
Nota: Controlla Anche le Impostazioni di Collazione
La collazione influisce sull’ordinamento e sul comportamento di confronto delle stringhe. Puoi verificarla con:
SHOW VARIABLES LIKE 'collation%';
È meno probabile che la collazione causi direttamente mojibake, ma influisce sull’ordinamento e sulla precisione della ricerca per il testo giapponese. È rassicurante confermare che vengano utilizzate impostazioni come utf8mb4_general_ci o utf8mb4_unicode_ci.
Nella sezione successiva, spiegheremo metodi di configurazione concreti per gestire correttamente il giapponese in MySQL, inclusi i modi per modificare queste impostazioni.
4. Come Configurare MySQL per Gestire Correttamente il Giapponese
Dì Addio al Mojibake con le Impostazioni Giuste
Per gestire correttamente il giapponese in MySQL, è essenziale standardizzare tutte le impostazioni del set di caratteri. In particolare, utf8mb4 è la scelta consigliata perché supporta non solo il giapponese, ma anche emoji e caratteri speciali.
In questa sezione, spieghiamo metodi di configurazione concreti per il lato client, il lato server e i livelli database/tabella/colonna.
4.1 Configurazione Lato Client: Impostala Esplicitamente alla Connessione
Subito dopo aver stabilito la connessione a MySQL, esegui il seguente comando per bloccare il set di caratteri della connessione su utf8mb4:
SET NAMES 'utf8mb4';
Questo comando si applica contemporaneamente alle seguenti tre variabili:
character_set_clientcharacter_set_connectioncharacter_set_results
✅ Nota:
- Se ti connetti da PHP, scrivi qualcosa come
mysqli_set_charset($conn, 'utf8mb4');. - Quando usi il comando CLI
mysql, specificare--default-character-set=utf8mb4è altrettanto efficace.
4.2 Configurazione Lato Server: Impostazioni Persistenti tramite my.cnf
Aggiungendo impostazioni come le seguenti a my.cnf (o my.ini), puoi cambiare il set di caratteri predefinito per l’intero server MySQL a utf8mb4:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
✅ Note Importanti:
- Devi riavviare MySQL dopo aver modificato la configurazione.
- Esempio:
sudo systemctl restart mysql(Linux) - La posizione del file varia a seconda dell’ambiente. I percorsi Linux comuni includono
/etc/mysql/my.cnfe/etc/my.cnf.
4.3 Specificare i Set di Caratteri per Database e Tabelle
Quando crei nuovi database o tabelle, specifica esplicitamente il set di caratteri:
Esempio: Creare un Database
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Esempio: Creare una Tabella
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Se Hai Bisogno di Convertire una Tabella Esistente
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
4.4 Set di Caratteri Consigliato: Perché utf8mb4?
MySQL ha anche un set di caratteri chiamato utf8, ma supporta solo fino a 3 byte per carattere UTF-8. Di conseguenza, emoji e alcune varianti di kanji non possono essere memorizzate correttamente.
Al contrario, utf8mb4 supporta fino a 4 byte ed è quindi pienamente compatibile con UTF-8. È per questo che è diventata la raccomandazione standard oggi.
Nel prossimo capitolo, spiegheremo le impostazioni e le precauzioni relative al giapponese specifiche per gli ambienti Docker. Copriamo i punti chiave per prevenire il mojibake anche nelle configurazioni di sviluppo containerizzate.
5. Gestione del giapponese in un ambiente Docker
Garantire un supporto adeguato per il giapponese negli ambienti containerizzati
Negli ultimi anni, Docker è diventato un ambiente di sviluppo comune. Tuttavia, molti sviluppatori segnalano che “il testo giapponese diventa illeggibile in MySQL eseguito su Docker”. Questo accade di solito perché le impostazioni di locale del container o la configurazione iniziale di MySQL non sono configurate correttamente.
In questa sezione, introduciamo soluzioni pratiche per gestire correttamente il giapponese quando si utilizza MySQL in Docker.
5.1 Configurare il supporto per il locale nel Dockerfile
Se il tuo server di applicazioni (non solo il container MySQL) deve gestire il giapponese, è richiesta la configurazione del locale. Di seguito un esempio per un Dockerfile basato su Debian:
RUN apt-get update && apt-get install -y locales \
&& locale-gen ja_JP.UTF-8 \
&& update-locale LANG=ja_JP.UTF-8
ENV LANG=ja_JP.UTF-8
ENV LC_ALL=ja_JP.UTF-8
✅ Punti chiave:
- Previene errori di codifica durante la lettura o la scrittura di file giapponesi lato applicazione.
- Influenza non solo MySQL ma anche ambienti di runtime come PHP e Python.
5.2 Specificare i set di caratteri in docker-compose
Quando si avvia un container MySQL con docker-compose.yml, è possibile specificare i set di caratteri come segue:
services:
db:
image: mysql:8.0
container_name: mysql-ja
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
LANG: ja_JP.UTF-8
LC_ALL: ja_JP.UTF-8
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
✅ Note aggiuntive:
- La sezione
command:permette di passare parametri di avvio a MySQL. TZeLANGaiutano a garantire un ambiente compatibile con il giapponese adeguato.
5.3 Verificare il supporto per il giapponese all’interno del container MySQL
Per confermare che MySQL sia configurato correttamente con utf8mb4, entra nel container e controlla:
docker exec -it mysql-ja mysql -u root -p
Dopo l’accesso, esegui:
SHOW VARIABLES LIKE 'character_set%';
Se tutte le impostazioni rilevanti sono utf8mb4, l’archiviazione e la visualizzazione del testo giapponese dovrebbero funzionare in modo affidabile.
Riepilogo: In Docker, le impostazioni di avvio e il locale sono critici
Per gestire in modo sicuro il giapponese in MySQL all’interno di Docker:
- Specifica esplicitamente
utf8mb4all’avvio del container MySQL - Imposta il locale del container dell’applicazione su
ja_JP.UTF-8
Queste pre-configurazioni sono estremamente importanti.
Nella prossima sezione, copriremo i problemi frequentemente segnalati e le loro soluzioni pratiche.
6. Problemi comuni e come risolverli
Vedi ancora testo illeggibile dopo la configurazione? La causa potrebbe persistere
Anche dopo aver cambiato le impostazioni di MySQL in utf8mb4, il testo giapponese potrebbe non visualizzarsi o salvarsi correttamente. In questa sezione, introduciamo problemi frequentemente segnalati e le loro soluzioni pratiche.
Problema 1: Le modifiche di configurazione non hanno effetto
Causa:
Dopo aver modificato file di configurazione come my.cnf o docker-compose.yml, MySQL non è stato riavviato.
Soluzione:
- Ambiente server:
sudo systemctl restart mysql - Ambiente Docker:
docker-compose down→docker-compose up -d
Problema 2: Il giapponese appare illeggibile nel terminale
Causa:
Il problema potrebbe non essere MySQL stesso, ma la codifica di visualizzazione del terminale. Ad esempio, il Prompt dei comandi di Windows potrebbe non visualizzare correttamente UTF-8.
Soluzione:
- Windows: Passa a UTF-8 usando
chcp 65001 - macOS/Linux: Assicurati che la codifica del terminale sia impostata su UTF-8 (di solito è il valore predefinito)
Problema 3: I database o le tabelle esistenti sono stati creati con latin1
Cause:
Se i database o le tabelle esistenti sono stati originariamente creati con latin1, i dati giapponesi potrebbero già essere corrotti.
Soluzione:
Verifica la struttura della tabella:
SHOW CREATE TABLE your_table_name;Converti il set di caratteri della tabella:
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Importante:
I dati già corrotti non possono essere riparati solo con la conversione. Considera di ripristinare da un backup o correggere manualmente i dati.
Problema 4: Incoerenza della codifica dei caratteri in applicazioni PHP o Python
Cause:
Anche se MySQL utilizza utf8mb4, si verifica il garbling se l’applicazione invia dati con una codifica diversa.
Soluzione:
- PHP:
mysqli_set_charset($conn, "utf8mb4"); - Python (MySQL Connector): Specificare
charset='utf8mb4'quando ci si connette
Problema 5: Testo corrotto durante l’importazione/esportazione di file CSV o Excel
Cause:
I file CSV o Excel possono usare Shift_JIS o UTF-8 con BOM, che potrebbero non corrispondere alla configurazione utf8mb4 di MySQL.
Soluzione:
- Converti i file CSV in UTF-8 prima dell’importazione
- Esegui esplicitamente
SET NAMES 'utf8mb4';prima dell’esportazione - Quando salvi da Excel, scegli il formato “UTF-8 (with BOM)”
Checklist completa di risoluzione dei problemi
| Checkpoint | Status |
|---|---|
All character_set_* variables are utf8mb4 | ✅ |
collation_server is utf8mb4_general_ci | ✅ |
| Database, table, and column character sets are explicitly defined | ✅ |
Application sends data using utf8mb4 | ✅ |
| Environment (terminal/editor) encoding is UTF-8 | ✅ |
Nella sezione successiva, riassumeremo i punti chiave e forniremo raccomandazioni finali per gestire in modo sicuro il giapponese negli ambienti MySQL.
7. Conclusione
Rivedere i concetti e le impostazioni essenziali per gestire il giapponese in MySQL
Per gestire correttamente il giapponese in MySQL, non basta presumere che “impostarlo su utf8 sia sufficiente”. Ciò che conta davvero è coerenza della configurazione e comprendere l’intero flusso dei dati.
Punti chiave trattati in questo articolo:
- La causa principale del mojibake giapponese è l’uso di set di caratteri inappropriati come
latin1o impostazioni non corrispondenti tra client e server. - Le impostazioni del set di caratteri di MySQL possono essere verificate usando il comando
SHOW VARIABLES. - Il set di caratteri consigliato è
utf8mb4. È completamente compatibile con UTF-8 e supporta emoji e caratteri kanji estesi. - La configurazione dovrebbe essere applicata a tre livelli : client, server e livello database/tabella.
- Negli ambienti Docker, specificare
command:eLANGè essenziale . Sia la locale che il set di caratteri devono essere configurati correttamente. - Se si verificano problemi, isolare e risolvere passo passo . Controllare non solo MySQL ma anche il terminale, il livello dell’applicazione e le interazioni con dati esterni.
Buone pratiche per operazioni future
- Quando si configura un nuovo ambiente MySQL, progettalo con
utf8mb4come impostazione predefinita fin dall’inizio . - In sviluppo di squadra o in ambienti multi‑environment, documenta e condividi i file di configurazione e i parametri di connessione .
- Negli ambienti Docker o CI/CD, automatizzare la configurazione tramite variabili d’ambiente e file di configurazione gestiti è fondamentale.
- Durante l’importazione/esportazione dei dati, considera l’uso di strumenti di conversione della codifica dei caratteri come iconv o nkf .
Considerazioni finali
Una volta che il tuo ambiente MySQL è configurato correttamente per il giapponese, lo sviluppo e le operazioni continuative diventano notevolmente più fluidi.
Comprendere “perché si verifica il mojibake” e “quali impostazioni devono essere configurate” ti permette di prevenire i problemi prima che si verifichino e garantire un’elaborazione stabile dei dati.
Speriamo che questa guida ti aiuti a costruire un ambiente di sviluppo più affidabile e confortevole.
8. Domande frequenti (FAQ)
Domande comuni sul supporto MySQL per il giapponese
Q1. Il testo giapponese appare come “???”. Qual è la causa?
A. La causa più comune è un mismatch di codifica dei caratteri. Per esempio, se il client invia testo giapponese usando utf8mb4 ma il server lo riceve come latin1, si verifica il mojibake.
Eseguire SET NAMES 'utf8mb4'; al momento della connessione risolve molti casi.
Q2. Ho impostato utf8mb4 in my.cnf, ma non viene applicato.
A. Modificare semplicemente my.cnf non è sufficiente. Devi riavviare il server MySQL.
Su Linux, esegui sudo systemctl restart mysql. In Docker, esegui docker-compose down seguito da docker-compose up -d.
Q3. Le tabelle esistenti contengono giapponese corrotto. È possibile correggerle?
A. Il recupero completo può essere difficile, ma puoi provare i seguenti passaggi:
- Controlla la struttura della tabella (
SHOW CREATE TABLE) - Converti il set di caratteri
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Se i dati sono già stati corrotti, potrebbe essere necessario ripristinare da backup o correzione manuale.
Q4. Uso MySQL in Docker e riscontro garbling giapponese.
A. Oltre alle impostazioni di MySQL, devi configurare il locale nel tuo Dockerfile o docker-compose.yml (ad esempio, LANG=ja_JP.UTF-8).
Specifica inoltre esplicitamente --character-set-server=utf8mb4 quando avvii il container MySQL.
Q5. Qual è la differenza tra utf8 e utf8mb4? Quale dovrei usare?
A. L’utf8 di MySQL supporta solo caratteri UTF-8 a 3 byte. Al contrario, utf8mb4 supporta caratteri a 4 byte, inclusi emoji e kanji estesi.
Sia per compatibilità che per prospettive future, utf8mb4 è fortemente consigliato.
Q6. I file CSV esportati da Excel diventano corrotti. Cosa devo fare?
A. Excel può utilizzare Shift_JIS o UTF-8 con BOM per impostazione predefinita, il che può entrare in conflitto con le impostazioni di MySQL.
Salva il file CSV esplicitamente in formato UTF-8, o esegui SET NAMES 'utf8mb4'; prima dell’importazione per allineare le codifiche.
Se queste FAQ non risolvono il tuo problema, rivedi la tua configurazione fin dall’inizio o considera di ricostruire l’ambiente secondo le istruzioni.
Affrontare le sfide tecniche con pazienza è la chiave per gestire correttamente i dati giapponesi in MySQL.


