Falscher String-Wert: '\ xEF \ xBF \ xBD' für die Spalte

7

Ich habe eine Tabelle, die ich mit verschiedenen Charakteren umgehen muss. Die Zeichen enthalten Ø, ® etc.

Ich habe meine Tabelle auf utf-8 als Standardsortierung eingestellt, alle Spalten verwenden den Tabellenstandard, aber wenn ich versuche, diese Zeichen einzufügen, erhalte ich den Fehler: Falscher Zeichenfolgenwert: '\ xEF \ xBF \ xBD' für Spalte ' buyerName 'in Zeile 1

Meine Verbindungszeichenfolge ist als

definiert %Vor%

Ich weiß nicht, warum ich immer noch Fehler sehe. Habe ich etwas mit dem .net-Connector oder mit meinem MySQL-Setup verpasst?

- Bearbeiten--

Meine (neue) C # -Einfügeanweisung sieht folgendermaßen aus:

%Vor%

Angenommen, dies ist der richtige Weg, um parametrisierte Anweisungen zu verwenden, gibt es immer noch einen Fehler

%Vor%

Irgendwelche anderen Ideen?

    
Robert H 22.06.2012, 15:16
quelle

4 Antworten

14

\xEF\xBF\xBD ist die UTF-8-Codierung für das Unicode-Zeichen U+FFFD . Dies ist ein Sonderzeichen, das auch als "Ersatzzeichen" bezeichnet wird. Ein Zitat aus der Wikipedia-Seite über die speziellen Unicode-Zeichen :

  

Das Ersatzzeichen (oft ein schwarzer Diamant mit einem weißen Fragezeichen) ist ein Symbol, das im Unicode-Standard bei Codepoint U + FFFD in der Tabelle Specials gefunden wird. Es wird verwendet, um auf Probleme hinzuweisen, wenn ein System einen Datenstrom nicht zu einem korrekten Symbol dekodieren kann. Es wird am häufigsten angezeigt, wenn eine Schriftart kein Zeichen enthält, aber auch angezeigt wird, wenn die Daten ungültig sind und keinem Zeichen entsprechen:

Es sieht also so aus, als ob Ihre Datenquelle beschädigte Daten enthält. Es ist auch möglich, dass Sie versuchen, die Daten mit der falschen Codierung zu lesen. Woher kommen die Linien?

Wenn Sie die Daten nicht korrigieren können und Ihre Eingabe tatsächlich ungültige Zeichen enthält, können Sie einfach die Ersatzzeichen entfernen:

%Vor%     
Elian Ebbing 22.06.2012, 18:56
quelle
5

NIEMALS, EVER, erzeuge jemals eine solche SQL-Anweisung. Das ist offen für SQL-Injection.

Ich füge das als Antwort hinzu, weil das ein so grundlegender Fehler ist, dass Sie wahrscheinlich einen Großteil Ihres Programms neu schreiben müssen.

So liefern Sie keine Parameter für eine SQL-Anweisung und es ist niemandem wert, Ihre Frage zu beantworten, da Sie parametrisierte Abfragen verwenden sollten, die wahrscheinlich auch Ihr Problem beheben.

    
mattmanser 22.06.2012 16:14
quelle
2

Mattmanser hat Recht, schreiben Sie nie eine SQL-Abfrage, indem Sie die Parameter direkt in der Abfrage verketten. Ein Beispiel für eine parametrisierte Abfrage ist:

%Vor%     
Elian Ebbing 22.06.2012 16:22
quelle
-1

Für diejenigen, die ein ähnliches Problem mit PHP haben, versuchen Sie die Funktion utf8_encode($string) . Es funktioniert einfach!

    
Augusto Santana 25.08.2015 14:04
quelle

Tags und Links