MySql 的异常:变量 'character_set_client' 不能设置为 'utf16' 的值
本文关键字:不能 设置 的值 utf16 client character 异常 变量 MySql set | 更新日期: 2023-09-27 17:59:26
以前我使用sql server 2005作为我的网站数据库,一切正常。现在我已经更改为MySql服务器5.5数据库,因为它是开源的。
我使用 Navicat Premium 将数据从 sql 服务器传输到 mysql。我使用 mysql workbench 和 navicat 来管理我的数据库。当我声明与 mysql 数据库的连接时出现问题。这是我的代码:
MySqlCommand cmdselect;
MySqlConnection conNDB;
MySqlDataReader Mydtr;
string server = "localhost";
string database = "maindb";
string uid = "root";
string password = "abc123";
string strCon = "SERVER=" + server + ";" + "DATABASE=" +
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
string strSelect = "SELECT * FROM announcement";
conNDB = new MySqlConnection(strCon);
conNDB.Open();
cmdselect = new MySqlCommand(strSelect, conNDB);
Mydtr = cmdselect.ExecuteReader();
rptAnnounce.DataSource = Mydtr;
rptAnnounce.DataBind();
Mydtr.Close();
conNDB.Close();
对 MySql.Data 的引用已设置。在这里我收到此错误消息:
异常详情: MySql.Data.MySqlClient.MySqlException: 变量"character_set_client"不能 设置为"utf16"的值 错误消息指出此错误发生在连接期间。打开((;
当我继续刷新错误页面时,有时我遇到了另一个错误。 这是:
异常详细信息:MySql.Data.MySqlClient.MySqlException:数据包的预期结束 错误消息指出此错误发生在 Mydtr = cmdselect 期间。执行读取器((;
我是 mysql 的新手。 我不知道这是什么问题。 我想这个问题来自数据库的设置或数据,而不是我的源代码。
有人知道解决方案吗? 非常感谢您的帮助。 我已经尝试了4天,但无法解决。
解决了!!感谢@Etienne拉赫德和@jeremi
所有的问题都来自字符集问题。
解决方案:下载 navicat,以更改数据库和每个表的字符集。
您需要检查 2 个地方:
1(右键单击数据库,例如。我的数据库。然后选择属性并设置字符集
2( 右键单击表并选择系列零件设计表。单击每一行以更改字符集,最后转到"选项"选项卡并更改字符集。
供您参考:这是非常罕见的情况。我谷歌它几乎找不到解决方案。 我在安装Mysql的过程中创建了这个错误,我选择了utf16格式><</p>
顺便说一下,简单的连接字符串就可以了。
"server=localhost;database=maindb;uid=root;pwd=abc123;CharSet=utf8; port=3306";
几点加起来。
从MySQL 5.5版本开始,它不支持utf16或utf32字符集编码。
有几件事需要从两者来看
- 与数据库建立连接的客户端
- 数据库本身
它使用以特定格式编码的查询调用对数据库的查询,并且服务器必须完整地理解这些查询并以特定格式响应,客户端可以依次理解。
第 1 点:所以我们需要在客户端级别设置字符集,在连接字符串中为
Charset=utf8;
反过来,您必须检查数据库和表(您正在向其查找查询事务(字符集和排序规则
MySQL服务器上有四个级别的编码字符集和排序规则,以提高灵活性
- 整个服务器server_character_set的字符集
- 数据库的字符集
- 表的字符集
- 表列的字符集
您可以使用以下查询检查这些值
show variables like 'character%';
show variables like '%collation%';
因此,重点是数据库服务器以连接字符串中指定的编码读取这些查询。
第 2 点 除了在连接字符串中指定字符集外,您还可以在打开连接后在查询时为客户端(服务器中断(设置字符集
set names 'charset';
Ex: set names 'utf8';
从客户端到服务器的字符集特定问题中存在 3 个重要的服务器参数 character_set_client
- 服务器为客户端设置指定的字符集 - 传递到 的查询 character_set_connection
- 服务器为连接事务设置指定的字符集 character_set_results
- 服务器为从数据库到客户端的返回结果和错误消息设置指定的字符集
点 3 您可以在 DB 上设置这些变量,而不是点 1 和点 2,以确保正确的客户端服务器事务
基本上,客户端和DB(服务器,数据库表,列(编码和排序规则类型必须相似,以避免数据库事务期间的数据丢失。
希望这有帮助.....
可能是您正在尝试与 utf16 通信,但数据库仅支持 utf8 或其他内容。
尝试将此添加到连接字符串:
Character Set=utf8
我的连接字符串如下所示:
"server=" + settings.DatabaseHost +
";User Id=" + settings.DatabaseUsername +
";password="+ settings.DatabasePassword +
";database="+ settings.DatabaseName+
";Persist Security Info=True" +
";Connect Timeout=5;Default Command Timeout=10" +
";Character Set=utf8";
如果这不起作用,请尝试 ASCII 或拉丁语1
连接字符串字符集升级到 utf8mb4 后未升级 MySql 客户端库,则可能会发生此错误"异常详细信息:System.Collections.Generic.KeyNotFoundException:">
请将 MySql.data.dll 库版本更新到最新的 6.6.5.0
希望这应该解决找不到的键异常。