programing

"지정된 키 'utf8mb4'가 사전에 없습니다.

muds 2023. 8. 14. 23:09
반응형

"지정된 키 'utf8mb4'가 사전에 없습니다.

C#의 SQL에 문제가 있습니다.

ExecuteReader()를 사용하려고 하면 다음 줄에 오류가 나타납니다.

MySqlDataReader reader = readcmdQuery.ExecuteReader();
System.Collections.Generic.KeyNotFoundException
  HResult=0x80131577
  Nachricht = The given key 'utf8mb4' was not present in the dictionary.
  Quelle = System.Private.CoreLib
  Stapelüberwachung:
   at System.ThrowHelper.ThrowKeyNotFoundException[T](T key)
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at MySql.Data.MySqlClient.CharSetMap.GetCharacterSet(DBVersion version, String CharSetName)
   at MySql.Data.MySqlClient.MySqlField.SetFieldEncoding()
   at MySql.Data.MySqlClient.MySqlField.set_CharacterSetIndex(Int32 value)
   at MySql.Data.MySqlClient.MySqlField.SetTypeAndFlags(MySqlDbType type, ColumnFlags flags)
   at MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlField field)
   at MySql.Data.MySqlClient.NativeDriver.GetColumnsData(MySqlField[] columns)
   at MySql.Data.MySqlClient.Driver.GetColumns(Int32 count)
   at MySql.Data.MySqlClient.ResultSet.LoadColumns(Int32 numCols)
   at MySql.Data.MySqlClient.ResultSet..ctor(Driver d, Int32 statementId, Int32 numCols)
   at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)
   at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
   at decustomer___LAP_Projekt.MainWindow.MySQLConnector()

저는 Visual Studio나 XAMPP의 문제라고 생각했습니다.

연결 문자열에 CHARSET=utf8 추가 - 데이터베이스에서 "utf8mb4"를 "utf8_german2_ci"로 변경 - SET NAMES 'utf8' 실행 - MySQL 업데이트 - 다른 클라이언트에서 시도됨 - MySQL Installer 8.0.20(이전:xampp)으로 새 mysql 서버 설정

코드 조각:

string connStr = CreateConnStr("localhost", "xxx", "root", "");
MySqlConnection connection = new MySqlConnection(connStr);
connection.Open();


public static string CreateConnStr(string server, string databaseName, string user, string pass)
        {

string connStr = "server=" + server + ";database=" + databaseName + ";uid=" +
user + ";password=" + pass + ";CHARSET=utf8;pooling=false;Allow User Variables=True";
return connStr;
        }
...
string readcmdQuery = "SELECT id, vorname, nachname FROM berater;CharSet=utf8;";
sqlcmd.CommandText = readcmdQuery;
MySqlDataReader reader = readcmdQuery.ExecuteReader();
consList.Items.Clear();
while(reader.Read())
...

제발 도와주세요.인터넷에서 다른 해결 방법을 찾을 수 없습니다.

MySql의 아주 오래된 버전을 사용하고 있는 것 같습니다.데이터: 보고하는 문제는 오래 전에 수정된 버그 58244처럼 들립니다.

아니면 약간 다른 조건에서 나타나는 약간 다른 종류의 버그를 발견했을 수도 있습니다.그렇다면 https://bugs.mysql.com/ 에서 보고하고 수정 버전을 기다릴 수 있습니다.

그러나 MySql을 제거하는 것이 좋습니다.데이터를 저장하고 MySqlConnector를 대신 설치합니다.지원됩니다.utf8mb4처음부터 비동기 지원을 추가하고 다른 많은 버그를 수정합니다.

언급URL : https://stackoverflow.com/questions/61783752/the-given-key-utf8mb4-was-not-present-in-the-dictionary

반응형