객체 목록의 인코딩 변경

c# character-encoding dapper mysql sql-server

문제

Dapper를 사용하여 SQL Server의 데이터를 읽은 다음 다른 MySQL 데이터베이스에 데이터를 저장하는 프로그램이 있습니다. 그것이하는 일은 다음과 같습니다.

  1. SQL 서버에서 객체의 목록으로 데이터를 읽습니다. 예를 들어 List<AKindOfObject> = SQL Server에서 데이터를 읽습니다.
  2. MySQL에 연결을 열고 List<AKindOfObject>

문제는 AKindOfObject 일부 속성이 원래 데이터베이스에 중국어로 저장 AKindOfObject 입니다. 데이터가 MySQL 데이터베이스로 전송되면 그 한자는 "?"로 표시됩니다.

C # 코드에서 List<AKindOfObject> 의 인코딩을 List<AKindOfObject> 로 변경하는 방법이 있습니까?

전문가 답변

나는 여기서 어떤 일이 벌어지고 있는지 의심 스럽다 . 데이터베이스에 유니 코드가 아닌 열이 있고 유니 코드 데이터를 저장하려고한다. 설명 할 수없는 문자가 실제로 그리스 문자가됩니다. 올바른 수정 방법은 다음과 같습니다. 열이 유니 코드인지 확인하십시오. 열 인코딩 덤비는 것은 작동하지만 그건 그냥 유니 코드를 사용하는 것에 비해 많은 일의 저주 수 있습니다.


Dapper는 ADO.NET에 "있는 그대로"물건을 전달합니다. 공급자가하는 일은 공급자에게 달려 있습니다. 를 통해 - 데이터베이스에 데이터를 보낼 때하지만, ANSI 및 유니 코드 사이에서 선택을 말할 수있는 방법이있다 DbString , 즉,

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

이것은 또한 길이 등을 제어 할 수 있습니다. 그러나 우리는 여기서 인코딩을 제어하지 않습니다. 인코딩은 일반적으로 데이터베이스 자체 또는 공급자의 속성입니다. MySQL에 ADO.NET에서 제어 할 수있는 맞춤식 방법이 있다면, 나는 "모든 귀"이지만, 우선 ADO.NET에서 작동하도록해야합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow