recherche

Maison  >  Questions et réponses  >  le corps du texte

.NET Framework ne prend pas en charge le jeu de caractères « utf8mb3 » : System.NotSupportedException

J'essaie d'exécuter un serveur avec une base de données MySQL, mais je continue à recevoir cette énorme erreur et je ne sais pas pourquoi.

[21:15:49,107] Server Properties Lookup: Error While Initialization
DOL.Database.DatabaseException: Table DOL.Database.ServerProperty is not registered for Database Connection...
   at DOL.Database.ObjectDatabase.SelectAllObjects[TObject]()
   at DOL.GS.ServerProperties.Properties.get_AllDomainProperties()
   at DOL.GS.ServerProperties.Properties.InitProperties()
   at DOL.GS.GameServer.InitComponent(Action componentInitMethod, String text)```

also this error

[21:15:35,991] ExecuteSelectImpl: UnHandled Exception for Select Query "DESCRIBE `Specialization`"
System.NotSupportedException: Character set 'utf8mb3' is not supported by .Net Framework.
   at MySql.Data.MySqlClient.CharSetMap.GetCharacterSet(DBVersion version, String charSetName)
   at MySql.Data.MySqlClient.MySqlField.SetFieldEncoding()
   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, Boolean force)
   at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
   at MySql.Data.MySqlClient.MySqlDataReader.Close()
   at MySql.Data.MySqlClient.MySqlCommand.ResetReader()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteReader()
   at DOL.Database.SQLObjectDatabase.ExecuteSelectImpl(String SQLCommand, IEnumerable`1 parameters, Action`1 Reader)```


P粉063039990P粉063039990480 Il y a quelques jours1316

répondre à tous(2)je répondrai

  • P粉647449444

    P粉6474494442023-10-20 17:11:15

    Il existemises à jour/NET disponibles pour le connecteur MySQL.

    Après la mise à jour vers la version 8.0.28 (package NuGet MySql.Data) tout est revenu à la normale.

    répondre
    0
  • P粉683665106

    P粉6836651062023-10-20 12:08:27

    Dans mon cas, j'ai installé celui par défaut avec utf8mb310.6.4-MariaDB.

    J'ai eu la même erreur en essayant de lire le tableau.

    J'ai résolu le problème en modifiant tous les paramètres de jeu de caractères dans la configuration MariaDB en utf8mb4.

    Puis j'ai vidé ma base de données et je l'ai réimportée. Cette fois-ci précisez utf8mb4 lors de la création de la base de données.

    Ainsi, les requêtes SELECTUPDATE normales fonctionnent correctement et plus aucune erreur ne se produit.

    Mais lorsque mon application appelle la procédure stockée, je continue de recevoir des erreurs.

    Je pense que cela pourrait être dû au fait que la procédure stockée est enregistrée dans information_schema 数据库中,它仍然是 utf8mb3 并且我找不到将其更改为 的方法>utf8mb4.

    Après avoir passé beaucoup de temps à essayer de mettre en œuvre des solutions de contournement étranges, je suis tombé sur ce rapport de bug :

    Impossible d'utiliser MariaDB 10.6 à partir de l'application client C# :
    https://jira.mariadb.org/browse/MDEV-26105?attachmentViewMode=List

    Un utilisateur a dit : 

    MySqlCommand setcmd = new MySqlCommand("SET character_set_results=utf8", conn);
    int n = setcmd.ExecuteNonQuery();
    setcmd.Dispose();

    J'ai donc fini par ajouter ceci à mon projet VB avant d'exécuter la procédure stockée :

    Dim sqlCommand As New MySqlCommand
    sqlCommand.Connection = _MySqlCn
    sqlCommand.CommandText = "SET character_set_results=utf8"
    sqlCommand.ExecuteNonQuery()

    Cela a résolu l'erreur pour moi.

    C'est aussi ce que j'ai modifié précédemment dans la configuration du serveur MariaDB :

    [client]
    default-character-set=utf8mb4
    
    [mysql]
    default-character-set=utf8mb4
    
    # this is read by the standalone daemon and embedded servers
    [server]
    
    # this is only for the mysqld standalone daemon
    [mysqld]
    
    old_mode=
    character-set-server = utf8mb4
    character-set-client=utf8mb4
    collation-server = utf8mb4_unicode_520_ci
    init-connect='SET NAMES utf8mb4'

    répondre
    0
  • Annulerrépondre