0

当通过 VB.Net 和 MySql 数据提供程序向 Mysql 表发出一个简单的 Select 语句以搜索一些希腊字符串时,我无法获得任何结果集。MYSQL 版本:5.5.32 VB.Net:2010

我需要对传递的字符串进行任何特殊编码吗?

PS:已经尝试过下面发布的解决方案:

  1. β字符是什么编码?输入来自哪里?如果它来自您的控制台,您需要确保它使用 UTF-8 而不是 ISO-8859-1 – Pekka 2011-08-11 08:05:07

  2. 尝试使用:mysql_query("SET NAMES 'utf8'"); – 2011 年 10 月 26 日 12:36

我的代码如下所示:

    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)

谢谢

4

2 回答 2

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 文件的默认设置。请参阅此处检查它们是否保存为 UTF-8 的步骤。

我猜你有一个 WinForms 应用程序,所以很可能你的 vb 文件被正确保存,因此你的输入是 UTF-8,你不需要转换它。

如果您的数据库没有将其排序规则设置为 UTF-8,那么您需要将输入从 UTF-8 转换为您的数据库具有的编码。

于 2013-10-12T22:28:29.777 回答
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)如有必要,请调整行- 例如,它可能需要数据类型和大小。

于 2013-10-12T22:28:30.233 回答