Autor Beitrag
binco
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mi 07.03.07 16:43 
Ich arbeite mit den MySQL Direct Units und muss nun in meine Datenbank Namen eintragen. Wenn der Name ein Umlaut enthält, wird die INSERT-Abfrage mit der Fehlermeldung:
"Data too long for column 'Nachname' at row 1"
abgebrochen und die Werte werden nicht eingetragen. Wenn ich dieselbe Abfrage mit dem MySQL Query Browser ausführe, werden die Daten problemlos eingefügt.

Kann mir jemand sagen, wo das Problem ist und wie es sich beheben lässt???

Danke binco
binco Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Mi 07.03.07 17:27 
hatte denn niemand ein ähnliches Problem???
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Sa 30.08.08 06:46 
user profile iconbinco hat folgendes geschrieben:
hatte denn niemand ein ähnliches Problem???


Die Zeit für eine Antwort ist zwar verstrichen, aber ich habe eine Teilantwort,
falls einen es interessiert und auch eine Frage.

Die Antwort lautet:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
procedure TtlDataModule.AddFontStyle(var AStyle : TStyleObject; iPos : Integer);
var SQL : TStringList;
    bRes : Boolean;
begin
    SQL := TStringList.Create;
    SConnect;
    with qryMain, SQL, AStyle do
    begin
      Text := 'INSERT INTO styles (';
      Add('stylename,');
      Add('position,');
      Add('fontname,');
      Add('fontsize,');
      Add('fontstyle,');
      Add('fontcolor');
      Add(') VALUES (');
      Add(''''+EscapeStr(StyleName)+''',');
      Add(''''+IntToStr(iPos)+''',');
      Add(''''+EscapeStr(AFont.Name)+''',');
      Add(''''+IntToStr(AFont.Size)+''',');
      Add(''''+IntToStr(Byte(AFont.Style))+''',');
      Add(''''+ColorToString(AFont.Color)+''')');

      query(Text, false, bRes);

      if(bRes)then
      begin
        id := LastInsertId;
      end
      else
      begin
        ErrorNotify;
      end;
    end;
    SQL.Free;
end;



Und die Frage:

Wenn ich also ein Umlaut in meinen Strings habe und die Datenbanktabelle bzw. das Feld
ein utf8_general_ci ist, wird kein Wert reingeschrieben, bzw. auch abgeschnitten.

Wenn ich aber das Datenbank-Tabellenfeld ein latin1_german2_ci ist, wird das Umlaut zu einem
Fragezeichen
.

Ich habe in PHP die Erfahrung gemacht, dass ich utf8_encode ausführen mußte, damit es richtig klappt,
wie mache ich es dann in Delphi?

Gibts eine utf8_encode funktion? Das hieße ja dann dass ich auch das Delphi Programm umstellen muß, so dass es
utf8 richtig darstellt? Bei einer Website stelle ich es im Header ein. Aber wie siehts dann mir der
Suche aus werden die Wörter mit Umlauten erkannt? Oder ich muß mit utf8_ auch suchen.



Also dieses Problem mit den Zeichensätzen habe ich noch allgemein nicht richtig im Griff. Kann mir einer
erklären wie ich dieses Problem angehe???
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Di 02.09.08 20:46 
Hallo, alle herhören ;-)

ich habe das Problem gelöst, dabei könnten mir hier doch viel bessere Experten schnell diese Antwort gegeben haben

Die Lösung:

nach dem Connect,
ausblenden Delphi-Quelltext
1:
query("SET CHARACTER SET latin1", false, bRes);					


ausführen und Umlaute werden nun richtig gespeichert. Dabei ist collation der MySQL Datenbank
Tabellen und Felder auf latin1_german2_ci gesetzt.