当通过VB.Net和MySql数据提供程序发出一个简单的Select语句时,我无法获得任何结果集,搜索一些希腊字符串的Mysql表。 MYSQL版本:5.5.32 VB.Net:2010
我是否需要对传递的字符串进行任何特殊编码?
PS:已经尝试过下面发布的解决方案:
β字符的编码是什么?输入来自哪里?如果它来自你的控制台,你需要确保它使用UTF-8而不是ISO-8859-1 - Pekka웃2011年8月11日8:05
尝试使用:mysql_query(“SET NAMES'utf8'”); - 2011年10月26日12:36
我的代码看起来像fllowing:
Dim ds As New DataSet
Dim da As New MySqlClient.MySqlDataAdapter
Dim dt As New DataTable
Dim utf8Encoding As New System.Text.UTF8Encoding
Dim sql, st As String
Dim bytes() As Byte
Dim com As New MySql.Data.MySqlClient.MySqlCommand("SET NAMES 'utf8'", MysqlConn)
com.ExecuteNonQuery()
bytes = (Encoding.UTF8.GetBytes(TextBox2.Text))
st = Encoding.UTF8.GetString(bytes)
sql = "Select * from Customers where name like '%" & st & "%'".ToString
Dim command As New MySqlClient.MySqlCommand(sql, MysqlConn)
da.SelectCommand = command
da.Fill(ds)
MysqlConn.Close()
DataGridView1.DataSource = ds.Tables(0)
感谢名单
答案 0 :(得分:0)
根据我在ASP.NET中的VB.NET的经验,有一些事情需要做,以便希腊语(例如非拉丁语)字符工作:
数据库:数据库的排序规则应设置为UTF-8。
连接字符串:确保您的连接字符串的“字符集”设置为UTF-8。
<connectionStrings>
<add name="connstr" connectionString="Data Source=127.0.0.1;Database=db_name;User ID=db_user;Password=db_pass;Character Set=utf8;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
代码文件:所有代码文件必须使用UTF-8(带签名)编码保存。这是所有Visual Studio文件的默认值。请参阅here检查它们是否保存为UTF-8的步骤。
我猜你有一个WinForms应用程序,所以很可能你的vb文件被正确保存,因此,你的输入是UTF-8而你不需要转换它。
如果您的数据库的排序规则设置为UTF-8,那么您需要将输入从UTF-8转换为数据库的编码。
答案 1 :(得分:0)
我不熟悉使用MySql。但是,通过UTF-8可能是问题(.NET使用UTF-16作为字符串)。你可以这样试试:
Dim ds As New DataSet
Dim da As New MySqlClient.MySqlDataAdapter
Dim dt As New DataTable
Dim sql, st As String
sql = "Select * from Customers where name like ?name"
Dim command As New MySqlClient.MySqlCommand(sql, MysqlConn)
Dim theName As String = "%" & TextBox2.Text & "%"
da.Parameters.Add("name", theName)
da.SelectCommand = command
da.Fill(ds)
MysqlConn.Close()
DataGridView1.DataSource = ds.Tables(0)
如有必要,请调整行da.Parameters.Add("name", theName)
- 例如它可能需要数据类型和大小。