Onjuiste tekenreekswaarde: ‘\xEF\xBF\xBD’ voor kolom

Ik heb een tabel die ik nodig heb om verschillende karakters te verwerken. De karakters zijn oa Ø, ® etc.

Ik heb mijn tabel ingesteld op utf-8 als de standaardsortering, alle kolommen gebruiken de standaardtabel, maar wanneer ik deze tekens probeer in te voegen, krijg ik de foutmelding: Onjuiste tekenreekswaarde: ‘\xEF\xBF\xBD’ voor kolom ‘ buyerName’ op rij 1

Mijn verbindingsreeks is gedefinieerd als

string mySqlConn = "server="+server+";user="+username+";database="+database+";port="+port+";password="+password+";charset=utf8;";

Ik weet niet waarom ik nog steeds fouten zie. Heb ik iets gemist met de .net-connector of met mijn MySQL-configuratie?

–Bewerken–

Mijn (nieuwe) C# insert-instructie ziet er als volgt uit:

MySqlCommand insert = new MySqlCommand( "INSERT INTO fulfilled_Shipments_Data " +
     "(amazonOrderId,merchantOrderId,shipmentId,shipmentItemId,"+
     "amazonOrderItemId,merchantOrderItemId,purchaseDate,"+ ...
      VALUES (@amazonOrderId,@merchantOrderId,@shipmentId,@shipmentItemId,"+
      "@amazonOrderItemId,@merchantOrderItemId,@purchaseDate,"+ 
      "paymentsDate,shipmentDate,reportingDate,buyerEmail,buyerName,"+ ...
       insert.Parameters.AddWithValue("@amazonorderId",lines[0]);
       insert.Parameters.AddWithValue("@merchantOrderId",lines[1]); 
       insert.Parameters.AddWithValue("@shipmentId",lines[2]);
       insert.Parameters.AddWithValue("@shipmentItemId",lines[3]);
       insert.Parameters.AddWithValue("@amazonOrderItemId",lines[4]);
       insert.Parameters.AddWithValue("@merchantOrderItemId",lines[5]);
       insert.Parameters.AddWithValue("@purchaseDate",lines[6]);
       insert.Parameters.AddWithValue("@paymentsDate",lines[7]);
 insert.ExecuteNonQuery();

Ervan uitgaande dat dit de juiste manier is om geparametriseerde instructies te gebruiken, geeft het nog steeds een fout

"Incorrect string value: '\xEF\xBF\xBD' for column 'buyerName' at row 1"

Heeft u nog andere ideeën?


Antwoord 1, autoriteit 100%

\xEF\xBF\xBDis de UTF-8-codering voor het unicode-teken U+FFFD. Dit is een speciaal teken, ook wel het “vervangende teken” genoemd. Een citaat van de wikipedia-pagina over de speciale unicode-tekens:

Het vervangende teken � (vaak een zwarte ruit met een wit vraagteken) is een symbool dat in de Unicode-standaard wordt gevonden bij codepunt U+FFFD in de tabel Specials. Het wordt gebruikt om problemen aan te geven wanneer een systeem niet in staat is om een stroom gegevens te decoderen naar een correct symbool. Het wordt meestal gezien wanneer een lettertype geen teken bevat, maar wordt ook gezien wanneer de gegevens ongeldig zijn en met geen enkel teken overeenkomen:

Het lijkt er dus op dat uw gegevensbron beschadigde gegevens bevat. Het is ook mogelijk dat u de gegevens probeert te lezen met de verkeerde codering. Waar komen de lijnen vandaan?

Als u de gegevens niet kunt herstellen en uw invoer inderdaad ongeldige tekens bevat, kunt u de vervangende tekens verwijderen:

lines[n] = lines[n].Replace("\xFFFD", "");

Antwoord 2, autoriteit 7%

Mattmanser heeft gelijk, schrijf nooit een sql-query door de parameters rechtstreeks in de query samen te voegen. Een voorbeeld van een geparametriseerde zoekopdracht is:

string lastname = "Doe";
double height = 6.1;
DateTime date = new DateTime(1978,4,18);
var connection = new MySqlConnection(connStr);
try
{
    connection.Open();
    var command = new MySqlCommand(
        "SELECT * FROM tblPerson WHERE LastName = @Name AND Height > @Height AND BirthDate < @BirthDate", connection);
    command.Parameters.AddWithValue("@Name", lastname);
    command.Parameters.AddWithValue("@Height", height);
    command.Parameters.AddWithValue("@Name", birthDate);
    MySqlDataReader reader = command.ExecuteReader();
    ...
}
finally
{
    connection.Close();
}

Antwoord 3

Voor degenen die een soortgelijk probleem hebben met het gebruik van PHP, probeer de functie utf8_encode($string). Het werkt gewoon!

Other episodes