c# - 表格字符编码 - 应用程序异常

标签 c# asp.net mysql mysql-connector

我有一个代码:

CREATE TABLE IF NOT EXISTS Person
(
   name varchar(24) ...
)
CHARACTER SET utf8 COLLATE utf8_polish_ci;

这在我的应用程序中工作正常,但我读到如果有人在名称字段中输入包含代码大于 127 的字符的字符串,数据库将使用 2 个字节(或更多)来存储此字符。所以我想,我会将字符集更改为 utf16:

CHARACTER SET utf16 COLLATE utf16_polish_ci;

但是现在当我运行我的应用程序时,出现异常:KeyNotFoundException。它完全符合这些说明:

MySqlCommand komenda = baza.Połączenie.CreateCommand ();
komenda.CommandText  = zapytanie;

MySqlDataReader dr = komenda.ExecuteReader (); // HERE, at execute reader method

if (dr.Read ()) ...

1) 有人遇到过类似的问题吗? 2) 知道如何在数据库字段中始终使用 2 个字节/字符吗?

最佳答案

我不确定我是否理解您为什么要从 UTF-8 转换为 UTF-16。我假设您担心任何需要两个字节或更多字节来存储的字符不适合 UTF-8 编码。不是这种情况。在 MySQL 中,UTF-8 值可以用一个、两个或三个字节存储。 Unicode 点 U+0000 到 U+007F 占用 1 个字节,点 U+0080 到 U+07FF 占用 2 个字节——这个范围涵盖了波兰语字母表。由于波兰字母表中的大多数字符需要 1 个字节来存储,因此您应该坚持使用 UTF-8 并节省一些内存。但是,如果您希望始终使用 2 个字节,以浪费空间为代价,您可以坚持使用 UTF-16。

这里有一些有用的链接:

MySQL 中的 Unicode 支持:http://dev.mysql.com/doc/refman/5.6/en/charset-unicode.html

基本 Unicode 概述:http://www.joelonsoftware.com/articles/Unicode.html

至于异常,这纯粹是一种猜测,它可能与尝试读取 UTF-8 编码的数据有关,就好像它是 UTF-16 编码的一样。在表中已有 UTF-8 编码数据后,您是否更改了字符集?

关于c# - 表格字符编码 - 应用程序异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882942/

相关文章:

c# - 在 C# 中将哈希表转换为字典

c# - 使用裸对象或动态数据显示动态内容

c# - 搜索分层数据的最佳方法

.net - 将 SSRS .RDL 渲染为 PDF 并打开它

php - 如何从 mySQL 和 PHP 中检索多维数组的结果?

c# - 分析 word 文档中的文本 - 如何让它忽略书签?

c# - ASP.Net Core 2.1 中的身份 < - 自定义 AccountController

c# - 使用 ListView 访问 Select 上的数据项

mysql - 使用 MySQL 查询检索包含特殊字符的电子邮件地址

Mysql 创建表,将 substr 作为新列