11.886 messaggi dal 09 febbraio 2002
Contributi
Salve a tuti,
attualmente sto utilizzando questo comando per importare delle istruzioni sql all'interno di un database.

mysql nomedatabase < nomefile.txt

Nel caso in cui nomefile.txt abbia la codifica UTF8, il comando fallisce. Nella fattispecie ricevo l'errore:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '&acute;&#9559;&#9488;


l'errore deriva dal fatto che mysql non riconosce i primi 3 byte dell'intestazione dei file con codice utf8. Come risolvo?
grazie

Enjoy learning and just keep making
823 messaggi dal 05 agosto 2002
Ciao, dovresti dirci che versione di mysql stai usando, e verificare che il characterset del db, del client e della tabella sia effettivamente utf8.
Usa i comandi:
mysql> show variables like "%character%";
mysql> show create table (nometabella);
mysql> status;

Se il file non fosse effettivamente utf8 usa iconv per convertirlo

Stick to your guns.
Formazione su MySQL o Firebird? Contattami!
11.886 messaggi dal 09 febbraio 2002
Contributi
Mysql versione 4.1.1x
tabelle latin1

Allora, spiego il problema in maniera più approfondita, ammesso che abbiate voglia di sentirmi rantolare :)

Ho sviluppato un'applicazione .net che mi fa il dump di un database mysql remoto. In pratica genera un file con le solite istruzioni DROP IF, CREATE, INSERT. Gli utenti del database, per qualche motivo a me ignoto, continuano a buttarmi dentro del testo proveniente da Word comprendente caratteri assurdi tipo l'apice speciale, i tre puntini di sospensione, il dash lungo, le virgolette ignobili e altra spazzatura del genere.
Mi sono accorto che, se alla mia applicazione faccio salvare il file con la codifica Latin1, alcuni di quei caratteri strambi vengono convertiti in versioni più "umane" senza preavviso. Esempio, l'apice di Word diventa un apice normale e questo non solo mi cambia il contenuto dei campi, ma mi produce un file non usabile dal momento che mi trovo in situazioni tipo:

INSERT INTO tabella ('guarda un po' qui');

io ovviamente faccio un replace sugli apici normali affinchè vengano trattati letteralmente, ma non mi va di fare altri replace su altri caratteri che *potrebbero* essere convertiti in apici normali dallo StreamWriter.

Usando altri tipi di codifica (Es ASCII) molti caratteri diventavano simpatici punti interrogativi, e così, dato che per quanto strana l'arte moderna va preservata, mi sono deciso ad usare la UTF8.
Sfortunatamente il comando mysql non riconosce automaticamente il tipo di codifica e mi da un'errore alla linea 1.
Alla fine ho usato il parametro --force dopo aver messo una istruzione dummy in cima al file e siccome avevo già perso troppo tempo, mi sono accontentato del risultato.

[3 byte di intestazione]SELECT 'Se fallisci chissene';

Funziona molto bene, i caratteri vengono preservati tutti e quindi potrei dire di aver risolto. Però avrei sperato di vedere qualche parametro che da linea di comando mi lasciasse esplicare il tipo di codifica del file da importare.
Modificato da BrightSoul il 15 settembre 2005 16.59 -

Enjoy learning and just keep making
823 messaggi dal 05 agosto 2002
Non puoi specificare direttamente la codifica del file da importare, ma devi:

1. verificare che il file sia codificato come vuoi tu (es UTF8)
2. verificare che il server sia in grado di gestire l'UTF8 a livello di server e di tabella
3. verificare che anche il client stia usando UTF8 (e quindi non faccia lui casino con le istruzioni che manda su).

La parte 3 si imposta e verifica cosi:
C:\Documents and Settings\utente>mysql --default-character-set=latin1 -uroot -
ppass
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 38 to server version: 5.0.12-beta-nt-max

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> status;
--------------
mysql Ver 14.12 Distrib 5.0.12-beta, for Win32 (ia32)
Connection id: 38
Current database:
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.0.12-beta-nt-max
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1


come vedi ho forzato il charset lato client a latin1 e il server è utf8, potevo anche fare:

C:\Documents and Settings\utente>mysql --default-character-set=utf8 -uroot -ppass
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 39 to server version: 5.0.12-beta-nt-max

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> status;
--------------
mysql Ver 14.12 Distrib 5.0.12-beta, for Win32 (ia32)
Connection id: 39
Current database:
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.0.12-beta-nt-max
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8

Stick to your guns.
Formazione su MySQL o Firebird? Contattami!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.