【问题标题】:Cannot search Mysql for greek strings无法在 Mysql 中搜索希腊字符串
【发布时间】:2013-10-12 22:01:04
【问题描述】:

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

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

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

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

  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)

感谢

【问题讨论】:

    标签: mysql vb.net


    【解决方案1】:

    根据我在 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 转换为您的数据库具有的编码。

    【讨论】:

      【解决方案2】:

      我不熟悉使用 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) - 例如它可能需要数据类型和大小。

      【讨论】:

        猜你喜欢
        • 2012-02-11
        • 2016-07-29
        • 2012-05-29
        • 2017-04-23
        • 2020-01-21
        • 1970-01-01
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        相关资源
        最近更新 更多