UTF8 import aus Excel-Sheet
UTF8 import aus Excel-Sheet
am 10.01.2007 17:36:41 von Johannes Vogel
Hi Leute
Ich habe ein Excel-Sheet mit russischem Inhalt (1. Spalte IDs, 2. Spalte
Text). Nun möchte ich gerne den Inhalt in eine MyISAM-Tabelle einfügen,
welche wie folgt definiert ist. (MySQL 4.1.21 auf FreeBSD 4.11)
CREATE TABLE `Translations` (
`id` int(10) unsigned NOT NULL default '0',
`idLanguages` tinyint(3) unsigned NOT NULL default '0',
`text` text character set latin1 NOT NULL,
`lastUpdate` datetime default NULL,
PRIMARY KEY (`id`,`idLanguages`),
KEY `idLanguages` (`idLanguages`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;
Ich habe kein LOAD DATA zur Verfügung, kann nicht updaten
(SharedHosting) und weiter steht phpMyAdmin 2.9.1.1 da.
Falls keine andere Variante, könnte ich auch über ein 5er-System mit
allen Rechten gehen, dann da ein dump rausziehen und diesen wieder im
SharedHosting-System reinspielen. Etwas umständlich. Es ist eine
einmalige Aktion - von dem her wäre diese Vorgehensweise akzeptabel.
Any Idea? Irgendwie müssen diese Daten doch da reingehen!?
Johannes
Re: UTF8 import aus Excel-Sheet
am 11.01.2007 17:58:26 von Johannes Vogel
Hi Leute
Ausgangslage bleibt die gleiche: Ein Excel-File mit russischem Inhalt
muss in eine limitierte MySQL 4.1.21 eingepflegt werden, so dass der
Inhalt dann auf dem Browser gezeigt werden kann. Ich hab's wie folgt
erfolglos versucht:
1. Excel-File gespeichert als Unicode Text
2. In Linux: `recode unicode..utf-8 `
3. `create table` [1] in MySQL 5.0.27
4. In MySQL 5.0.27 mittels `load data infile` [2]
5. mysqldump der tabelle >
6. scp des auf Endmaschine
7. mysql < in MySQL 4.1.21
8. Web-Output ist als Charset UTF-8 angegeben.
Ergebnis: Chrut!
Any Idea?
Johannes
[1]
CREATE TABLE `Translations` (
`id` int(10) unsigned NOT NULL default '0',
`idLanguages` tinyint(3) unsigned NOT NULL default '0',
`text` text NOT NULL,
`lastUpdate` datetime default NULL,
PRIMARY KEY (`id`,`idLanguages`),
KEY `idLanguages` (`idLanguages`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0
[2]
load data infile 'Russian.txt' into table Translations (id,text) set
idLanguages=10,lastUpdate=now();
Re: UTF8 import aus Excel-Sheet
am 11.01.2007 21:50:05 von Axel Schwenke
Johannes Vogel wrote:
> Hi Leute
>
> Ausgangslage bleibt die gleiche: Ein Excel-File mit russischem Inhalt
> muss in eine limitierte MySQL 4.1.21 eingepflegt werden, so dass der
> Inhalt dann auf dem Browser gezeigt werden kann. Ich hab's wie folgt
> erfolglos versucht:
Na dann schaun wir mal
> 1. Excel-File gespeichert als Unicode Text
Im Windows-Umfeld *sollte* das UTF-16 bedeuten. Allerdings ist das nur
gefestigtes Halbwissen meinerseits. Drauf verlassen würde ich mich nicht.
> 2. In Linux: `recode unicode..utf-8 `
Mein recode sagt, "unicode" sei ein Alias für "UTF-16". Alles noch gut.
> 3. `create table` [1] in MySQL 5.0.27
CREATE TABLE `Translations` (
...
`text` text NOT NULL,
...
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0
Das setzt den Zeichensatz der Spalte `text` auf utf8 und die Collation
auf utf8_general_ci. Ich hoffe, das was du wolltest.
Im vorhergehenden Posting hast du übrigens noch explizit latin1 für
diese Spalte angegeben.
> 4. In MySQL 5.0.27 mittels `load data infile` [2]
Zitat von
"The character set indicated by the character_set_database system
variable is used to interpret the information in the file. SET NAMES
and the setting of character_set_client do not affect interpretation
of input."
Möchtest du deiner Aussage noch irgend etwas hinzufügen?
> 5. mysqldump der tabelle >
Das ist sauber. Es wird alles als utf8 gespeichert und auch so
ausgewiesen.
> 6. scp des auf Endmaschine
Hieran zweifeln wir besser mal nicht ;-)
> 7. mysql < in MySQL 4.1.21
Das ist auch sauber, weil ja der Dump seine Codierung per SET NAMES
korrekt mitteilt.
> 8. Web-Output ist als Charset UTF-8 angegeben.
Und wie kommen die Daten in den HTML-Output? PHP? Setzt die Applikation
nach dem Connect zum MySQL-Server die Variablen character_set_connection
und character_set_results?
XL
Re: UTF8 import aus Excel-Sheet
am 11.01.2007 22:43:48 von dafox
Axel Schwenke schrieb:
> Johannes Vogel wrote:
>> Ausgangslage bleibt die gleiche: Ein Excel-File mit russischem Inhalt
>> muss in eine limitierte MySQL 4.1.21 eingepflegt werden, so dass der
>> Inhalt dann auf dem Browser gezeigt werden kann. Ich hab's wie folgt
>> erfolglos versucht:
>> 1. Excel-File gespeichert als Unicode Text
> Im Windows-Umfeld *sollte* das UTF-16 bedeuten. Allerdings ist das nur
> gefestigtes Halbwissen meinerseits. Drauf verlassen würde ich mich nicht.
Ja, das passt. Ich hab das genau wie Johannes es beschreibt bereits
durchgeführt, nur das ich keinen Dump erzeugt hab. Also mit recode von
dem Excel-Export nach UTF-8 und dann mit LOAD DATA geladen.
Funktionierte einwandfrei. Auch die Darstellung im Browser. Allerdings
muss das Server-Charset halt UTF-8 sein, sonst geht es nicht.
Re: UTF8 import aus Excel-Sheet
am 12.01.2007 11:04:00 von Johannes Vogel
Hi Axel
Erstmal Dankeschön! Dieses Character Encoding Zeugs ist doch wirklich
zum Haare rauffen! :-(
Axel Schwenke wrote:
> Johannes Vogel wrote:
>> 1. Excel-File gespeichert als Unicode Text
> Im Windows-Umfeld *sollte* das UTF-16 bedeuten. Allerdings ist das nur
> gefestigtes Halbwissen meinerseits. Drauf verlassen würde ich mich nicht.
>> 2. In Linux: `recode unicode..utf-8 `
> Mein recode sagt, "unicode" sei ein Alias für "UTF-16". Alles noch gut.
Es zeigt sich, dass das File tatsächlich UTF-8 geschrieben ist. Diesmal
hab ich n'Texteditor genommen, der das auch kann und via copy/paste das
von Excel in diesen reingenommen. Gespeichert und mit einem anderen
Texteditor, der auch UTF-8 liest, geöffnet. Passt. vi in Putty mit
Translation UTF-8 zeigt auch vernünftiges an.
>> 3. `create table` [1] in MySQL 5.0.27
> CREATE TABLE `Translations` (
> ...
> `text` text NOT NULL,
> ...
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0
> Das setzt den Zeichensatz der Spalte `text` auf utf8 und die Collation
> auf utf8_general_ci. Ich hoffe, das was du wolltest.
> Im vorhergehenden Posting hast du übrigens noch explizit latin1 für
> diese Spalte angegeben.
Ja, das will ich und hab's ja dann auch gemerkt, dass ich das noch
ändern muss. :-) Sollte ich was anderes wollen? Ich hab da nebst
russisch ja auch deutsch, englisch, und später vielleicht chinesisch
drin...?
>> 4. In MySQL 5.0.27 mittels `load data infile` [2]
> Zitat von
> "The character set indicated by the character_set_database system
> variable is used to interpret the information in the file. SET NAMES
> and the setting of character_set_client do not affect interpretation
> of input."
> Möchtest du deiner Aussage noch irgend etwas hinzufügen?
Also, das hab ich jetzt mal geändert. Vor dem `load data infile` hab ich
also `set names 'utf8'`, sowie `set character_set_database='utf8'` und
auch gerade `set character_set_server='utf8'`:
mysql> show variables like 'character%'\G
Variable_name: character_set_client
Value: utf8
Variable_name: character_set_connection
Value: utf8
Variable_name: character_set_database
Value: utf8
Variable_name: character_set_filesystem
Value: binary
Variable_name: character_set_results
Value: utf8
Variable_name: character_set_server
Value: utf8
Variable_name: character_set_system
Value: utf8
Variable_name: character_sets_dir
Value: /usr/local/mysql-.../charsets/
Dann `truncate...`, `load data infile ...`
Hier lag der erste Fehler (_database).
>> 5. mysqldump der tabelle >
> Das ist sauber. Es wird alles als utf8 gespeichert und auch so
> ausgewiesen.
Sieht mein vi, jEdit, tsWebEditor, jEdit auch so. :-)
>> 6. scp des auf Endmaschine
> Hieran zweifeln wir besser mal nicht ;-)
Hmm... Hier hätte ich zweifeln müssen. Ich hab dauernd ein falsches File
raufgeladen. Hab mal den Pfad beim Source geändert, das alte File noch
belassen und dauernd mit dem weiter gearbeitet.
So kann's ja nicht klappen! Argrh!
>> 7. mysql < in MySQL 4.1.21
> Das ist auch sauber, weil ja der Dump seine Codierung per SET NAMES
> korrekt mitteilt.
Klappte perfekt.
>> 8. Web-Output ist als Charset UTF-8 angegeben.
> Und wie kommen die Daten in den HTML-Output? PHP? Setzt die Applikation
> nach dem Connect zum MySQL-Server die Variablen character_set_connection
> und character_set_results?
>
Das klappt nun wunderbar. Ist das OK, wenn ich die Umsetzung von UTF-8
einfach dem Browser überlasse? In diesem Fall maskiere ich nichts mehr
(€ und sowas)? htmlentities() gehört der Vergangenheit an. Korrekt?
Danke für die Hilfe!
Johannes
Re: UTF8 import aus Excel-Sheet
am 12.01.2007 11:27:39 von Christian Kirsch
Johannes Vogel schrieb:
>
> Das klappt nun wunderbar. Ist das OK, wenn ich die Umsetzung von UTF-8
> einfach dem Browser überlasse? In diesem Fall maskiere ich nichts mehr
> (€ und sowas)? htmlentities() gehört der Vergangenheit an. Korrekt?
Die Umsetzung von UTF-8 in *was*? Wenn das HTML mit den richtigen
Headern geschickt wird, macht der Browser auch alles richtig. €
etc. kannst Du drinlassen, aber das hat nix mit UTF-8 zu tun. Das sind
HTML-Entities, die stellt der Browser m.E. unabhängig vom Character
Encoding immer richtig dar.
Re: UTF8 import aus Excel-Sheet
am 12.01.2007 11:36:19 von Johannes Vogel
Hi Christian
Christian Kirsch wrote:
> Johannes Vogel schrieb:
>> Das klappt nun wunderbar. Ist das OK, wenn ich die Umsetzung von UTF-8
>> einfach dem Browser überlasse? In diesem Fall maskiere ich nichts mehr
>> (€ und sowas)? htmlentities() gehört der Vergangenheit an. Korrekt?
> Die Umsetzung von UTF-8 in *was*? Wenn das HTML mit den richtigen
> Headern geschickt wird, macht der Browser auch alles richtig. €
> etc. kannst Du drinlassen, aber das hat nix mit UTF-8 zu tun. Das sind
> HTML-Entities, die stellt der Browser m.E. unabhängig vom Character
> Encoding immer richtig dar.
Merci für die Antwort. Naja, ich hab halt einfach
im HTML-Header drin. Muss ich das stattdessen in den HTTP-Header
reinpacken? In letzterem steht nur `Content-Type: text/html`.
Johannes
Re: UTF8 import aus Excel-Sheet
am 12.01.2007 12:14:14 von Kai Ruhnau
Johannes Vogel wrote:
> Hi Christian
>
> Christian Kirsch wrote:
>> Johannes Vogel schrieb:
>>> Das klappt nun wunderbar. Ist das OK, wenn ich die Umsetzung von UTF-8
>>> einfach dem Browser überlasse? In diesem Fall maskiere ich nichts mehr
>>> (€ und sowas)? htmlentities() gehört der Vergangenheit an. Korrekt?
Ja, htmlentities() kannst du getrost als htmlspecialchars() schreiben.
>> Die Umsetzung von UTF-8 in *was*? Wenn das HTML mit den richtigen
>> Headern geschickt wird, macht der Browser auch alles richtig. €
>> etc. kannst Du drinlassen, aber das hat nix mit UTF-8 zu tun. Das sind
>> HTML-Entities, die stellt der Browser m.E. unabhängig vom Character
>> Encoding immer richtig dar.
>
> Merci für die Antwort. Naja, ich hab halt einfach
>
> im HTML-Header drin. Muss ich das stattdessen in den HTTP-Header
> reinpacken? In letzterem steht nur `Content-Type: text/html`.
Es muss in den HTTP-Header rein. Wenn der Browser die -Zeile
liest, iest es bereits zu spät.
Ansonsten, wenn du es im HTTP-Header deklariert hast, dann brauchst du
nur noch <, ", & und (bei XML wenn du magst) > maskieren.
Güße
Kai
Xpost und Fup2 dclpm
--
This signature is left as an exercise for the reader.
Re: UTF8 import aus Excel-Sheet
am 12.01.2007 12:14:14 von Kai Ruhnau
Johannes Vogel wrote:
> Hi Christian
>
> Christian Kirsch wrote:
>> Johannes Vogel schrieb:
>>> Das klappt nun wunderbar. Ist das OK, wenn ich die Umsetzung von UTF-8
>>> einfach dem Browser überlasse? In diesem Fall maskiere ich nichts mehr
>>> (€ und sowas)? htmlentities() gehört der Vergangenheit an. Korrekt?
Ja, htmlentities() kannst du getrost als htmlspecialchars() schreiben.
>> Die Umsetzung von UTF-8 in *was*? Wenn das HTML mit den richtigen
>> Headern geschickt wird, macht der Browser auch alles richtig. €
>> etc. kannst Du drinlassen, aber das hat nix mit UTF-8 zu tun. Das sind
>> HTML-Entities, die stellt der Browser m.E. unabhängig vom Character
>> Encoding immer richtig dar.
>
> Merci für die Antwort. Naja, ich hab halt einfach
>
> im HTML-Header drin. Muss ich das stattdessen in den HTTP-Header
> reinpacken? In letzterem steht nur `Content-Type: text/html`.
Es muss in den HTTP-Header rein. Wenn der Browser die -Zeile
liest, iest es bereits zu spät.
Ansonsten, wenn du es im HTTP-Header deklariert hast, dann brauchst du
nur noch <, ", & und (bei XML wenn du magst) > maskieren.
Güße
Kai
Xpost und Fup2 dclpm
--
This signature is left as an exercise for the reader.
Re: UTF8 import aus Excel-Sheet
am 12.01.2007 13:25:54 von Claus Reibenstein
Christian Kirsch schrieb:
> Johannes Vogel schrieb:
>
>> Das klappt nun wunderbar. Ist das OK, wenn ich die Umsetzung von UTF-8
>> einfach dem Browser überlasse? [...]
>
> Die Umsetzung von UTF-8 in *was*?
Ersetze "Umsetzung" durch "Interpretation". Dann passt's.
GruÃ. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: UTF8 import aus Excel-Sheet
am 12.01.2007 17:10:22 von Axel Schwenke
Johannes Vogel wrote:
>
> Erstmal Dankeschön! Dieses Character Encoding Zeugs ist doch wirklich
> zum Haare rauffen! :-(
Jein. Man muß sich halt nur daran gewöhnen, bei jeder Datenquelle zu
spezifizieren welches Encoding sie verwendet bzw. welches man als
Datensenke von ihr erwartet.
>> Das setzt den Zeichensatz der Spalte `text` auf utf8 und die Collation
>> auf utf8_general_ci. Ich hoffe, das was du wolltest.
>> Im vorhergehenden Posting hast du übrigens noch explizit latin1 für
>> diese Spalte angegeben.
>
> Ja, das will ich und hab's ja dann auch gemerkt, dass ich das noch
> ändern muss. :-) Sollte ich was anderes wollen? Ich hab da nebst
> russisch ja auch deutsch, englisch, und später vielleicht chinesisch
> drin...?
Wenn das eine multilinguale Spalte ist, dann ist utf8 genau richtig.
>> Zitat von
>> "The character set indicated by the character_set_database system
>> variable is used to interpret the information in the file. SET NAMES
>> and the setting of character_set_client do not affect interpretation
>> of input."
>> Möchtest du deiner Aussage noch irgend etwas hinzufügen?
>
> Also, das hab ich jetzt mal geändert. Vor dem `load data infile` hab ich
> also `set names 'utf8'`, sowie `set character_set_database='utf8'` und
> auch gerade `set character_set_server='utf8'`:
set character_set_database='utf8' war das einzig nötige.
>>> 6. scp des auf Endmaschine
>> Hieran zweifeln wir besser mal nicht ;-)
>
> Hmm... Hier hätte ich zweifeln müssen. Ich hab dauernd ein falsches File
> raufgeladen.
LOL
>>> 8. Web-Output ist als Charset UTF-8 angegeben.
>> Und wie kommen die Daten in den HTML-Output? PHP? Setzt die Applikation
>> nach dem Connect zum MySQL-Server die Variablen character_set_connection
>> und character_set_results?
>>
>
> Das klappt nun wunderbar.
M.a.W. du setzt diese Variablen? Dann ist ja alles gut.
> Ist das OK, wenn ich die Umsetzung von UTF-8
> einfach dem Browser überlasse?
Wie andere schon schrieben, wird hier nichts "umgesetzt" sondern
vielmehr "interpretiert". Wenn du aber das Encoding des Inhalts korrekt
deklarierst - idealerweise per HTTP-Header, dann funktioniert das auch.
Den Fall, daß ein Browser kein utf8 kann, kann man IMHO vernachlässigen.
XL