以前我使用 sql server 2005 作为我的网站数据库,一切运作良好。 现在我已经改为 MySql server 5.5 数据库,因为它是开源的。
我使用Navicat Premium将我的数据从sql server传输到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'的值 错误消息说明在connection.Open();
期间发生此错误
当我继续刷新错误页面时,我有时会收到另一个错误。这是它:
异常详细信息:MySql.Data.MySqlClient.MySqlException:数据包的预期结束 错误消息声明在Mydtr = cmdselect.ExecuteReader();
期间发生此错误
我是mysql的新手。我不知道这是什么问题。我想这个问题来自数据库的设置或数据,而不是我的源代码。
有谁知道解决方案?非常感谢您的帮助。我一直试着4天但是无法解决。
答案 0 :(得分:3)
解决!!感谢@Etienne Rached和@jeremi
所有问题都来自字符集问题。
解决方案:下载navicat,更改数据库和每个表的字符集。
您需要检查两个地方:
1)右键单击数据库,例如。 MYDB。然后选择属性并设置字符集
2)右键单击表格并选择设计表格。单击每一行以更改字符集,最后转到“选项”选项卡并更改字符集。
您的信息:这是非常罕见的情况。我google它几乎找不到解决方案。我在安装Mysql时创建了这个错误,我选择了utf16格式><
顺便说一句,简单的连接字符串将起作用。喜欢"server=localhost;database=maindb;uid=root;pwd=abc123;CharSet=utf8; port=3306";
答案 1 :(得分:3)
嗨,加上以上几点。
从MySQL 5.5版本开始,它不支持utf16或utf32字符集编码。
有两件事需要从两个方面来看待
在客户端,它使用以特定格式编码的查询调用DB查询,服务器必须完整地理解这些查询并以特定格式响应,客户端可以依次理解。
第1点:所以我们需要在客户端级别设置charset,在连接字符串中设置为
Charset=utf8;
反过来,您必须检查数据库和表(您正在寻求查询事务)charset和collation
MySQL服务器上有四级编码charset和collation用于灵活性
您可以使用以下查询检查这些值
show variables like 'character%';
show variables like '%collation%';
因此,重点是DB服务器以连接字符串中指定的编码读取这些查询。
第2点除了在连接字符串中指定字符集外,还可以在打开连接后在查询中设置客户端(服务器中断)的字符集
set names 'charset';
Ex: set names 'utf8';
从客户端到服务器的charset特定问题中,有3个服务器参数很重要
character_set_client
- 服务器为客户端设置指定的字符集 - 传递给的查询
character_set_connection
- 服务器为连接事务设置指定的字符集
character_set_results
- 服务器为返回的结果设置指定的字符集,从DB到客户端的错误消息
第3点您可以在DB中设置这些变量,而不是第1点和第2点,以确保正确的客户端服务器事务
基本上,客户端和DB(服务器,数据库表,列)编码和排序规则类型必须类似,以避免数据库事务期间的数据丢失。
希望这会有所帮助.....
答案 2 :(得分:2)
可能是你正在尝试与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或latin1
答案 3 :(得分:1)
如果在将连接字符串字符集升级为utf8mb4后尚未升级MySql客户端库,则可能会出现此错误“异常详细信息:System.Collections.Generic.KeyNotFoundException:”
请将MySql.data.dll库版本更新为最新的6.6.5.0
希望这可以解决未找到密钥的异常。