mysql System.NotSupportedException:.Net Framework不支持字符集“utf8mb3”

qq24tv8q  于 2023-02-21  发布在  Mysql
关注(0)|答案(6)|浏览(355)

我正在尝试运行一个MySQL数据库服务器,但我不断得到这个巨大的错误,我不知道为什么。

[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)```
qmb5sa22

qmb5sa221#

MySQL连接器/NET有可用的更新。

更新到版本8.0.28(NuGet包MySql.Data)后,一切都恢复正常。

pw9qyyiw

pw9qyyiw2#

在我的例子中,我安装了10.6.4-MariaDB,默认情况下是utf8mb3附带的。
当我试图读表时,我得到了同样的错误。
我已经通过将MariaDB配置中的所有字符集设置更改为utf8mb4来修复它。
然后转储我的数据库并再次导入它。这次在创建数据库时指定utf8mb4
因此,正常的SELECTUPDATE查询工作正常,没有更多错误。
但是当我的应用程序调用存储过程时,我总是收到错误。
我想这可能是因为存储过程保存在information_schema数据库中,它仍然是utf8mb3,我找不到将其更改为utf8mb4的方法。
在浪费了大量时间尝试实现一些奇怪的变通方法之后,我遇到了这个bug报告:

MariaDB 10.6无法从C#客户端应用程序使用

https://jira.mariadb.org/browse/MDEV-26105?attachmentViewMode=list
其中一个用户说:
系统字符集只在MariaDB内部使用,不需要更改。在我用C#编写的客户端程序中,连接后我做了以下操作,使其与MariaDB 10.6兼容:

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

在这个命令中,由于old_mode设置,utf8被MariaDB默认为utf8mb4。这是导致我的程序出现问题的结果字符集。
所以我在执行存储过程之前,在VB项目中添加了以下代码:

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

这为我修复了错误。
此外,这是我以前在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'
41zrol4v

41zrol4v3#

也许是一个解决方案。来源:https://dba.stackexchange.com/questions/8239/how-to-easily-convert-utf8-tables-to-utf8mb4-in-mysql-5-5
将"字符集和校对“更改为utf8 mb 4。
对于每个数据库:

ALTER DATABASE
    database_name
    CHARACTER SET = utf8mb4
    COLLATE = utf8mb4_unicode_ci;

对于每个表:

ALTER TABLE
    table_name
    CONVERT TO CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

对于各色谱柱:

ALTER TABLE
    table_name
    CHANGE column_name column_name
    VARCHAR(191)
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

为我工作的Powershell和MariaDB 10. 6。希望这会有帮助;)

pvcm50d1

pvcm50d14#

在我的例子中,(MariaDB 10.6) 帮助将...\MariaDB 10.6\data\my.ini中的character-set-serverutf8更改为utf8mb4

y1aodyip

y1aodyip5#

对于.NET CORE 5.0,我必须将3个NuGet包从v.5.0.0升级到v.5.0.13:

  1. MySql.EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore.Design
  3. Microsoft.EntityFrameworkCore.Tools
ndh0cuux

ndh0cuux6#

我放弃了Oracle的MySQL Connector/Net,重新编写应用程序以使用MySqlConnector,从而“解决”了这个问题。虽然工作量很小,但由于用户管理依赖于MySql.Web,因此我还必须重新编写有关用户管理的所有内容,而这并不容易。

相关问题