mikrocontroller.net

Forum: PC Hard- und Software mysql: insert values mit Umlauten


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auszug aus der Consolen Session, gestartet unter Cygwin mit
mysql -u root -p
password:*****

mysql> create table ttt(t char(100)) CHARACTER SET utf8 COLLATE 
utf8_unicode_ci;

mysql> insert into ttt values ("Ä");
ERROR 1366 (HY000): Incorrect string value: '\x8E' for column 't' at row 
1
mysql> show create table ttt;
+-------+--------------------------------------------------------------- 
--------
-----------------------------------------------------------------+
| Table | Create Table
                                                                 |
+-------+--------------------------------------------------------------- 
--------
-----------------------------------------------------------------+
| ttt   | CREATE TABLE `ttt` (
  `t` char(100) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+-------+--------------------------------------------------------------- 
--------
-----------------------------------------------------------------+
1 row in set (0.00 sec)


Was könnte faul sein?
Liegt es eventuell gar nicht am mysql sondern an cygwin Konsole?

Autor: Iopodx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0x8E ist jedenfalls kein Ä im Unicode....

Autor: fbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Führ mal in der MySQL-Console folgendes aus:
show variables like 'character_set%';
Eventuell siehst Du dann schon was schiefläuft.
Abhilfe könnte dann einer der folgenden Zeilen bringen:
set names 'latin1';
set names 'cp850';
set names 'cp1250';
Oder die MySQL-Console schon mit passenden Parametern aufrufen (bzw. in 
der ini verewigen).
In der Windows-Shell kann man mit "mode con: codepage" schauen welche 
Codepage grade aktive ist, mit z.B. "mode con: codepage select=1250" 
auch passend umsetzen. Keine Ahnung wie das bei Cygwin geht.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mysql> show variables like "character_set%";
+--------------------------+-------------------------------------------- 
--------
-----+
| Variable_name            | Value
     |
+--------------------------+-------------------------------------------- 
--------
-----+
| character_set_client     | cp1250
     |
| character_set_connection | cp1250
     |
| character_set_database   | utf8
     |
| character_set_filesystem | binary
     |
| character_set_results    | cp1250
     |
| character_set_server     | utf8
     |
| character_set_system     | utf8
     |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.1\share\chars
ets\ |
+--------------------------+-------------------------------------------- 
--------
-----+
8 rows in set (0.00 sec)

um cygwin auszuschliessen, habe ich nun main.sql Datei mit
folgendem Inhalt angelegt. Diese wird dann mit source ausgeführt.
drop database if exists checked;
create database checked;
use checked;
drop table if exists junk;
create table junk(x varchar(100)) charset utf8;
explain checked.junk;
insert into junk values ("hello");
select * from junk;
insert into junk values("Ä");
select * from junk;

Der Fehler bleibt jedoch => cygwin als Ursache kann ausgeschlossen 
werden.

Führe ich ...
set names 'latin1';
set names 'cp850';
set names 'cp1250';
aus (eins nach dem anderen), und anschliessen wieder source main.sql
Steht anstatt Ä einfach -

+-------+
| x     |
+-------+
| hello |
| ─      |
+-------+
2 rows in set (0.00 sec)

Autor: fbi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
OK, dann landet der Datensatz zumindest schon mal in der Tabelle (das 
'-').
Die vom MySQL-Client und Cygwin verwendeten Codepages stimmen aber immer 
noch nicht, diesmal vermutlich allerdings bei der Ausgabe. Kannst ja mal 
mit einem anderen Client in die Tabelle schauen.

Versuch mal das angehängte SQL-Script (main.sql):
SET NAMES 'latin1';
drop database if exists checked;
create database checked;
use checked;
drop table if exists junk;
create table junk(x varchar(100)) charset utf8;
explain checked.junk;
insert into junk values ("hello");
select * from junk;
insert into junk values("Ä");
SET NAMES 'cp850';
select * from junk;

Du kannst natürlich das Script selbs auch gleich als UTF8 speichern 
(siehe angehängte main2.sql).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.