Modifier l'encodage d'une liste d'objets

c# character-encoding dapper mysql sql-server

Question

J'ai un programme qui utilise Dapper lire les données de SQL Server, puis enregistrer les données dans une autre base de données MySQL. Ce qu'il fait, c'est:

  1. Lecture dans les données du serveur SQL en tant que liste d'objets, par exemple List<AKindOfObject> = lu dans les données de SQL Server
  2. Ouvrez une connexion à MySQL, enregistrez la List<AKindOfObject>

Le problème est que certaines propriétés de AKindOfObject sont enregistrées en chinois dans la base de données d'origine. Lorsque les données sont transférées vers la base de données MySQL, ces caractères chinois sont affichés sous la forme "?".

Est-il possible de changer l'encodage de List<AKindOfObject> en gb2312 en code C #?

Réponse d'expert

Je soupçonne que ce qui se passe ici est simple: votre base de données a des colonnes non unicode et vous essayez de stocker des données unicode. Les personnages non représentables seront en effet grecs. La solution correcte est la suivante: assurez-vous que votre colonne est unicode. Messing avec codages de colonne pourrait fonctionner, mais bon sang qui est beaucoup de travail par rapport à l' utilisation juste unicode.


Dapper transmet les choses "telles quelles" à ADO.NET; ce que fait le fournisseur dépend du fournisseur. Il existe un moyen de lui DbString de choisir entre ANSI et Unicode lors de l’envoi de données dans la base de données - via DbString , c’est-à-dire

conn.Execute(sql, new {
    id, name,
    desc = new DbString { IsAnsi = true, Value = desc }
});

Cela vous permet également de contrôler la longueur, etc. Cependant, nous ne contrôlons pas l' encodage ici; le codage est généralement une propriété de la base de données elle-même ou du fournisseur. Si MySQL dispose de moyens spécifiques pour contrôler cela dans ADO.NET, je suis "tout ou rien", mais avant tout: vous devez le faire fonctionner dans ADO.NET brut.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi