mysql: insert values mit Umlauten

Gast #2006192
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?
Gast #2006247
Führ mal in der MySQL-Console folgendes aus:
1
show variables like 'character_set%';
Eventuell siehst Du dann schon was schiefläuft.
Abhilfe könnte dann einer der folgenden Zeilen bringen:
1
set names 'latin1';
2
set names 'cp850';
3
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.
Gast #2006254
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.
1
drop database if exists checked;
2
create database checked;
3
use checked;
4
drop table if exists junk;
5
create table junk(x varchar(100)) charset utf8;
6
explain checked.junk;
7
insert into junk values ("hello");
8
select * from junk;
9
insert into junk values("Ä");
10
select * from junk;

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

Führe ich ...
1
set names 'latin1';
2
set names 'cp850';
3
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)
Gast #2006291
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):
1
SET NAMES 'latin1';
2
drop database if exists checked;
3
create database checked;
4
use checked;
5
drop table if exists junk;
6
create table junk(x varchar(100)) charset utf8;
7
explain checked.junk;
8
insert into junk values ("hello");
9
select * from junk;
10
insert into junk values("Ä");
11
SET NAMES 'cp850';
12
select * from junk;

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.