• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kyrillische Zeichen in Datenbank schreiben

Sheva

Neues Mitglied
Hallo,

Ich habe eine Datenbank wo mehrere Nutzer drinn stehen. Diese Nutzer können registrieren und werden dann in die Datenbank geschrieben.
Angeben muss man den Benutzernamen, den Namen sowie das Passwort.

Nun möchte ich das man auch russische Eingaben tätigen kann. Ich müsste dann sozusagen die eingegenen Zeichen in utf 8 konvertieren und dann in die Datenbank schreiben lassen.
Funktioniert allerdings noch nicht. Hier erstmal der Quellcode:

PHP:
$post_name = utf8_encode($_POST['name']);
$post_nummer = utf8_encode($_POST['nummer']);
$post_Passwort = utf8_encode($_POST['passwort'])
;

Hier konvertiere ich die Daten in utf8 und anschließlend lege ich den Datensatz an:

PHP:
        $sql_nutzer_anlegen = "
            INSERT INTO $db.nutzer 
            (NUTZERID, NUTZERNR, NAME,  Passwort)
            VALUES 
            ('$post_nutzerid', '$post_nummer', '$post_name', '$post_Passwort')
            ;
        ";

In der Datenbank ist charakter_set_database auch auf utf8 gesetzt. Im PHP Dokument die meta Daten ebenfalls auf utf8.

Habe es auch schon mit convert_cyr_string versucht:

PHP:
$post_name_utf8 = convert_cyr_string($post_name, k, i);
$post_nummer_utf8 = convert_cyr_string($post_nummer, k, i);
$post_passwort_utf8 = convert_cyr_string($post_Passwort, k, i);

Und anschließend halt den String in UTF8 codiert per utf8_encode.


Hat aber alles nicht funktioniert. Weiß einer Rat ?
 
Werbung:
Füg mal nach mysql_connect() das ein.
Code:
mysql_set_charset("utf8");

Hat leider nichts gebracht. Durch die Umstellung wurden sogar meine ganzen Ä´s und Ü´s etc. -Sonderzeichen in unlesbare Symbole umgewandelt.

Hatte es eben mit der utf8_encode Methode probiert.

Allein wenn ich ein kyrillisches Zeichen eingebe schreibt er den Datensatz schon nicht in die Datenbank. Mein Testwort war: "тест пользователей"
 
Werbung:
Mit welchem Zeichensatz wird die Seite ausgeliefert? Das ist wichtig um zu wissen mit welchem Zeichensatz die Formulardaten überhaupt ankommen.

Wenn die Seite mit utf8 ausgeliefert wird, machst Du sie mit der Konvertierung über utf8_encode() nur kaputt. Das musst Du weglassen.
 
Mit welchem Zeichensatz wird die Seite ausgeliefert? Das ist wichtig um zu wissen mit welchem Zeichensatz die Formulardaten überhaupt ankommen.

Wenn die Seite mit utf8 ausgeliefert wird, machst Du sie mit der Konvertierung über utf8_encode() nur kaputt. Das musst Du weglassen.

Ausliefern tue ich Sie mit utf8

PHP:
<head>
    <title></title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <link href="styles/style.css" type="text/css" rel="stylesheet" />
</head>

Werd ich gleich mal ausprobieren.

EDIT: In der Datenbank habe ich vorhin nochmal die character_set_database Variable mit

Code:
SET character_set_database = 'utf8'

auf UTF-8 gesetzt. Setzt er das dann für immer darauf oder nur solang ich mein MySQL Programm schließe. Arbeite mit MySQL Workbench.

EDIT2: Wenn ich mein Programm schließe scheint er es wieder auf latin1 zurückzusetzen. Nur normalerweise müsste es doch mit dem Befehl funktionieren.
 
Zuletzt bearbeitet:
Ausliefern tue ich Sie mit utf8

PHP:
<head>
    <title></title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <link href="styles/style.css" type="text/css" rel="stylesheet" />
</head>

Nicht unbedingt. Diese Angabe kann durch den Header überschrieben werden, welchen der Server ausliefert. Den kannst Du dir bspw. mit den Firefox Seiteneigenschaften oder verschiedenen Erweiterungen anschauen,

Werd ich gleich mal ausprobieren.

Und was kam raus?

EDIT: In der Datenbank habe ich vorhin nochmal die character_set_database Variable mit

Code:
SET character_set_database = 'utf8'

auf UTF-8 gesetzt. Setzt er das dann für immer darauf oder nur solang ich mein MySQL Programm schließe. Arbeite mit MySQL Workbench.

EDIT2: Wenn ich mein Programm schließe scheint er es wieder auf latin1 zurückzusetzen. Nur normalerweise müsste es doch mit dem Befehl funktionieren.

Siehe Handbuch: MySQL :: MySQL 5.0 Reference Manual :: 5.1.3 Server System Variables
Wenn Du es so setzt, dann ist es nur eine Session-Variable. Du müsstest es imho in der my.ini anpassen, damit es immer gilt - dann aber für jede Datenbank im System. Allerdings hat man darauf (aus eben diesem Grund) nicht immer Zugriff hat.
 
Werbung:
Und was kam raus?

Ging leider nicht da ja in der Datenbank latin1 als Zeichensatz drinne steht.


Siehe Handbuch: MySQL :: MySQL 5.0 Reference Manual :: 5.1.3 Server System Variables
Wenn Du es so setzt, dann ist es nur eine Session-Variable. Du müsstest es imho in der my.ini anpassen, damit es immer gilt - dann aber für jede Datenbank im System. Allerdings hat man darauf (aus eben diesem Grund) nicht immer Zugriff hat.

Das wäre meine nächste Frage gewesen, denn ich finde diese my.ini nicht. Wenn die Internetseite online ist müsste doch diese Datei irgendwo auf dem FTP liegen (darüber lade ich es immer hoch).

Gibt es noch eine andere Möglichkeit wie ich die Zeichen in die Datenbank bekomme ? Theoretisch ja eigentlich nicht da latin1 ja zu wenig Zeichen (256) darstellen kann.
 
Genau, wenn die Datenbank latin1 ist geht es nicht. Wenn Du ein Hostingpaket hast, wende dich an den Webhoster.
 
Genau, wenn die Datenbank latin1 ist geht es nicht. Wenn Du ein Hostingpaket hast, wende dich an den Webhoster.

Habe ich gestern auch gemerkt das ich nur so an die my.ini rankommen :sad:

Aber wenn dann als Zeichensatz utf_8 steht müsste es ja theoretisch dann ohne utf8_encode() funktionieren ?
 
Werbung:
Moin,
kommst du nicht per phpmyadmin an deine DB?
Sonst kannst du die auch per PHP auf UTF8 stellen.

Mysql z.B. so:
Erstmal die Tabelle selbst:
ALTER TABLE `table` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

und dann für jedes nicht numerische feld so:
ALTER TABLE `table` CHANGE `spaltenname` `spaltenname` SPALTENTYP CHARACTER SET utf8 COLLATE utf8_general_ci

Für Cyrillic muss es evtl auch utf8_unicode_ci sein, bin mir da aber nicht sicher.

Bei UTF8 musst du natürlich auch deine html/php/js Dateien in UTF8 abspeichern, nicht nur so ausgeben.

Wenn die MySQL Verbindung nicht per default utf8 ist, dann musst du dies bei jeder Verbindung mitgeben.

MfG
 
Aber wenn dann als Zeichensatz utf_8 steht müsste es ja theoretisch dann ohne utf8_encode() funktionieren ?

Ja.

ALTER TABLE `table` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Dadurch ändert sich aber der Zeichensatz der Datenbank selbst nicht. "Nur" von den Tabellen. Außerdem sollte man anmerken, dass jegliche Inhalte dadurch "unbrauchbar" werden - man sollte sie vorher exportieren, in den neuen Zeichensatz umwandeln und hinterher wieder importieren.
 
Jedenfalls erstmal gut zu wissen wie es denn nun funktionieren würde.

@Sentence

Ich kann dir nicht sagen es bei dem Hoster überhaupt über phpmyadmin läuft. Ich sollte nur versuchen kyrillische Eingaben in die Datenbank schreiben zu lassen. Da ich aber nicht den Zeichensatz der DB ändern kann (jedenfalls ICH nicht) hat sich das ja erledigt.

Noch eine Frage, funktioniert das dann mit sämtlichen Sprachen ? UTF8 dürfte ja genug Zeichen darstellen können (2 hoch 32 ?)

Latin1 bzw. ISO kodiert die Zeichen ja in 8 Bit, also 2hoch8 = 256 Zeichen. Bei UTF8 sind es ja meist 1-4 Byte was ja dann 32 Bit wären bei 4 Byte ?!

UTF32 kodiert aber auch in 32 Bit, wo ist da der Unterschied zu UTF8 ?
 
Werbung:
Zurück
Oben