使用 .NET Core 服务从 MySQL 读取 č、ć 和 đ

Posted

技术标签:

【中文标题】使用 .NET Core 服务从 MySQL 读取 č、ć 和 đ【英文标题】:Reading č, ć and đ from MySQL using .NET Core service 【发布时间】:2019-10-29 02:31:49 【问题描述】:

我尝试了多种从 mysql 数据库中读取 ć、ć 和 đ 符号的选项,但均未成功。 代替:šuma, žeton, čevepčići, šuma, đak, džon

我得到:šuma、žeton、?evep?i?i、šuma、?ak、džon。

MySQl 表的排序规则是 utfmb4- 默认排序规则。相同的 .NET Core 服务在从数据库中读取上述标志时遇到问题,可以完美地执行插入操作。所以只是读取是个问题。

SO 上的一些成员建议在打开与数据库的连接后执行以下“SET 字符”命令应该会有所帮助,但这对我来说并非如此。

 string commColl = "SET character_set_client = 'utf8mb4'; set character_set_results = 'utf8mb4'; SET collation_connection = 'utf8mb4_general_ci'; SET NAMES UTF8;";

            MySqlCommand commCollation = new MySqlCommand(commColl, conn);

            try
            
                conn.Open();
                commCollation.ExecuteNonQuery();

另外,我尝试设置为 'utf8' 也没有成功。 此外,我还将 CharSet 部分放入连接字符串中:

 private readonly string connString = "host=aurora-host.wert.net;user=asop;password=ooppoo;database=test;Connect Timeout=10;CharSet=utf8;";

显示创建表:

创建表FEEDBACK ( EntryID int(11) NOT NULL AUTO_INCREMENT, AccessCode varchar(45) 整理 utf8mb4_unicode_ci 默认为空, DocumentPath varchar(255) 整理 utf8mb4_unicode_ci 默认为空, FreeText varchar(4000) 整理 utf8mb4_unicode_ci 默认为空, DateInsert 日期时间默认为空, SurveyID int(11) 默认为空, Document 斑点, DocumentExtension varchar(5) 整理 utf8mb4_unicode_ci 默认为空, CompanyID int(11) 默认为空, 主键 (EntryID) ) ENGINE=InnoDB AUTO_INCREMENT=98 默认字符集=utf8mb4 COLLATE=utf8mb4_unicode_ci

【问题讨论】:

.NET 字符串是 UTF16。您发布的页面证明.NET 方面没有问题 - SO 是一个 ASP.NET 站点。 can do insert operation perfectly 你确定吗? ? 是使用错误代码页转换 non Unicode 文本时使用的替换字符。当用错误的页面读取 to Unicode 时,使用了 Unicode 替换字符。 列的排序规则是什么?列上的 UTF8 和 Charset=UTF8 应该足够了。其他任何事情都只会造成麻烦 文本通过使用上述服务的网页插入到 mySQL 中,在 MySQLWorkBench 中我可以读取输入 1/1 的文本 很多人指出 UTF8 对 MySQL 来说是不够的,但它应该是 utf8mb4 排序规则,这是我的表的排序规则。列的数据类型是 VarChar 很多人指出了一些还不够的地方。替换字符的选择意味着问题发生在文本转换为 Unicode 之前。您还没有发布表创建架构,因此无法复制问题并尝试查看问题所在 【参考方案1】:

因此,问题在于检索数据的存储过程引用了另一个表中具有 swedish_latin_ci 排序规则的列。

utf8 charset 和 utf8_general_ci 排序规则就足够了。

【讨论】:

以上是关于使用 .NET Core 服务从 MySQL 读取 č、ć 和 đ的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .NET Core 6.0 中的 JWT 安全令牌中读取自定义声明值

C# 和 Docker - 无法从容器化 .NET Core 3.1 Web API 连接到容器化 MySQL 服务器

如何使用 ASP.NET Core 从查询字符串中读取值?

ASP.NET Core

使用 Azure Ad Auth 从 .NET Core Web API 读取/写入 Azure Blob

无法使用 ODBC 连接从 .Net Core 3.0 访问