Sonderzeichen die ich in die Datenbank eintrage werden zu Fragezeichen?

5 Antworten

Welchen Zeichensatz nutzt du bei dieser Tabelle? Du musst einen Zeichensatz wählen, der solche Zeichen enthält.

Beispielsweise:

 ALTER TABLE nachrichten CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
Woher ich das weiß:Studium / Ausbildung – Fachinformatiker

Techniktype 
Beitragsersteller
 16.10.2019, 09:42

das funktioniert aber garnicht :/

Techniktype 
Beitragsersteller
 16.10.2019, 09:34

ich verstehe nicht ganz, Zeichensatz? ich dachte Encoding?

HoneyBadger0  16.10.2019, 09:37
@Techniktype

Encoding kommt von Character Encoding = Zeichenkodierung. Diese legt den Zeichensatz fest. Hat für mich in diesem Zusammenhang die gleiche Bedeutung.

HoneyBadger0  16.10.2019, 09:47
@Techniktype

Das setzt die Zeichenkodierung deiner Tabelle auf eine die auch Emojis abspeichern kann. (Oben ist nur ein Beispiel für den Table 'nachrichten')

Du musst also die richtige Kodierung und Kollation setzen.

Techniktype 
Beitragsersteller
 16.10.2019, 09:50
@HoneyBadger0

Ja aber es bringt nichts das sind immer noch Fragezeichen :/ Was habe ich falsch gemacht?

Zeichensätze können an verschiedenen stellen konvertiert werden, ist es durchgehend UTF8?


Techniktype 
Beitragsersteller
 16.10.2019, 09:33

ja ich glaube schon ich wüsste nicht wo man es sonst noch umstellen könnte

1) Database: Change Database default collation as 

utf8mb4

.

2) Table: Change table collation as 

CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

.

Query:

ALTER TABLE Tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

3) Code:

INSERT INTO tablename (column1, column2, column3, column4, column5, column6, column7)
VALUES ('273', '3', 'Hdhdhdh😜😀😊😃hzhzhzzhjzj 我爱你 ❌', 49, 1, '2016-09-13 08:02:29', '2016-09-13 08:02:29')

4) Set 

utf8mb4

 in database connection:

  $database_connection = new mysqli($server, $user, $password, $database_name); 
  $database_connection->set_charset('utf8mb4');

HoneyBadger0  16.10.2019, 09:31

Erstes Ergebnis bei StackOverflow :^)

Techniktype 
Beitragsersteller
 16.10.2019, 09:35

das unten ist aber php und ich habe den Befehel IN Mysql ausgeführt

Weil es bei PHP auch nicht ging

Techniktype 
Beitragsersteller
 16.10.2019, 09:32

ist utf8mb4 mit utf-8 von php kompartiebel?

und was genau ist der Unterschied?

Am Encoding wird bei dem Prozess an mehreren Stellen gedreht:

  1. in dem Werkzeug, mit dem man in die Datenbank schreibt
  2. in der Datenbank selbst - manche Datenbanken unterstützen nicht alle Zeichen (auf DB2 zB würde das mit dem Emoji schon deshalb nicht gehen).
  3. in dem Werkzeug, mit dem man den Datenbankinhalt wieder anzeigt

Wenn mit MySQL etwas nicht geht, das mit einer anderen DB ging (mit welcher?), dann tippe ich mal auf Punkt 2.


Techniktype 
Beitragsersteller
 16.10.2019, 10:09

DB2? Woran sehen ich denn den Typ (Ich weiß ich habe nicht so viel Ahnung

zu 1. ich habe aber auch direkt in mysql den Befehl ausgeführt

hologence  16.10.2019, 10:15
@Techniktype

MySQL ist eine kostenlose Datenbank für kleine Anwendungen. DB2 ist eine Datenbank von IBM für sehr große Anwendungen. Andere bekannte Datenbanken sind MSSQL, Oracle, H2 ... Mit welcher Datenbank man arbeitet, weiß man, weil man sie installiert hat.

Techniktype 
Beitragsersteller
 16.10.2019, 10:28
@hologence

Ich habe sie aber nicht installiert ^^

aufjedenfall sieht phpmyadmin aus wie jede andere Datenbank die ich kenne

hologence  16.10.2019, 10:33
@Techniktype

phpmyadmin ist keine Datenbank, es ist eine Administrationsoberfläche für eine Datenbank, nämlich für MySQL.

Techniktype 
Beitragsersteller
 16.10.2019, 11:01
@hologence

Aber dann müsste es doch eigentlich gehen oder nicht?

hologence  16.10.2019, 11:18
@Techniktype

In der ursprünglichen Frage stand der Satz "Das hatte in einer anderen Datenbank wunderbar funktioniert" - und meine Frage in welcher das funktioniert hatte ist noch nicht beantwortet. Was genau sind die beiden Konfigurationen, die hier verglichen werden, die die funktioniert vs die die nicht funktioniert?

Techniktype 
Beitragsersteller
 16.10.2019, 11:35
@hologence

Die Datenbank war auch eine MYsql phpmadmin datenbank...

auf einer anderen habe ich es auch getestet da wird der Text sobald ein solches Zeichen auftaucht einfach abgeschnitten ab diesem Zeichen :/

Das kann doch nicht sein das die Datenbanj jedesmal was anderes macht?

das finde ich echt sehr sehr seltsam

hologence  16.10.2019, 11:52
@Techniktype

wer immer diese Szenarien installiert hat, sollte solche Fragen dazu beantworten können. Wenn das irgendwo im Web ist, dann sollte es dazu Support geben. Emojis brauchen in UTF-8-Codierung die maximale Länge von 4-Byte, vielleicht wird das nicht überall unterstützt (auch chinesische Schriftzeichen wären dann ein Problem).

Techniktype 
Beitragsersteller
 16.10.2019, 11:55
@hologence

ja der der es installiert hat hat noch weniger Ahnung als ich :D ehm wie genau kann man das einstellen/ändern

hologence  16.10.2019, 12:04
@Techniktype

ich kenne MySQL nicht im Detail und phpadmin gar nicht (ich habe immer alle Datenbanken mit Squirrel bedient). Da hilft nur noch Recherche im Internet.

Techniktype 
Beitragsersteller
 16.10.2019, 12:06
@hologence

ok und wonach suche ich ambesten? was genau meinst du mit maximale länge von 4 byte? von was?

Techniktype 
Beitragsersteller
 16.10.2019, 12:22
@hologence

wenn ich das jetzt richtig verstanden habe löse ich das Problem theorethisch wenn ich utf32 oder utf16 nehme?

hologence  16.10.2019, 12:28
@Techniktype

normalerweise können auch 4-Byte Zeichen mit einer Gruppe von 4 UTF-8 dargestellt werden.

wotan38  20.10.2019, 12:00
@Techniktype

Den Typ kann man nicht immer sehen bzw. erkennen, welcher Typ notwendig ist bestimmt die Anwendung. Die Zahl 4711 kann auch Text sein, wenn es als Markenzeichen verwendet wird. Das bestimmt dann der Benutzer, wie er es haben will. Ein Kalenderdatum wie z.B '20.10.2019' sollte date als Typ haben, muss aber nicht, weil es auch als Text durch geht. Allerdings kann man es nicht mehr korrekt nach Datum sortieren und auch keine Datumsberechnungen damit machen. Es wird dann eben wie Text behandelt. Die unterschiedlichen Typen sind notwendig, weil diese in der Datenbank unterschiedlich behandelt werden. Zu einem Text kann man keine Zahl addieren, auch wenn der Text wie eine Zahl aussieht.

Techniktype 
Beitragsersteller
 20.10.2019, 12:13
@wotan38

Achso also muss man diesen Typ ändern? In anderen Datenbanken hat es aber trotz des Typs funktioniert...

wotan38  20.10.2019, 13:51
@Techniktype

Die andere Datenbank hatte diesen Typ im Angebot, deshalb hat das dort funktioniert. Die Datenbank konnte diesen Typ auch erkennen, da er sich vonanderen Zeichen unterscheidet. Der DB2 ist ein rein professionelles Datenbanksystem und da sind Emojis reine Spielerei. Für deren Anwender sind sie nicht erforderlich.

Techniktype 
Beitragsersteller
 20.10.2019, 15:16
@wotan38

ich habe das Problem nun gelöst indem ich den Datenbank Zeichensatz auf utf8_mb4_bin gestellt habe

UTF8 ist dein Freund!
Woher ich das weiß:Studium / Ausbildung – Früher Beruf, heute »nur« noch Hobby.

Techniktype 
Beitragsersteller
 16.10.2019, 09:33

habe ich doch eingestellt? alles uft8_bin