沟通ASP.net和MySQL之间的问题

时间:2014-11-22 11:05:05

标签: c# mysql asp.net .net vb.net

我有以下情况 -

用户可以在文本框中输入任何语言的文本,并且需要将其与语言名称一起存储在我的数据库中。以下是button Update

上的代码
Dim conStr As String = "Dsn=search;database=search;description=search;option=0;port=0;server=localhost;uid=root;CharacterSet=UTF8;"
Dim s As String = txtLanguage.Text '<----"音読み現代仮名遣い人名用漢字"
mySQL = "INSERT INTO multi_language(language, characters)" & _
        " VALUES ('Japanese', '" & s & "')"
con.ConnectionString = conStr
con.Open()
cmd = New OdbcCommand(mySQL, con)
cmd.ExecuteNonQuery()
con.Close()

运行查询的屏幕短语

点击按钮后,Textbox中的文字变为'??????'  插入数据库的数据如下所示

  Language     |     characters
  --------------------------
  Japanese     |      ?????

我的表结构是

CREATE TABLE multi_language
(
id INTEGER NOT NULL AUTO_INCREMENT,
language VARCHAR(30),
characters TEXT,
PRIMARY KEY(id)
) ENGINE=INNODB CHARACTER SET = utf8;

当我直接在查询浏览器中执行查询时,它将正确执行,

我的编码有什么问题?我需要添加什么来获得正确的结果?

这是来自asp.net page and query browser

的插入比较的屏幕截图

3 个答案:

答案 0 :(得分:0)

您可以尝试这个建议的解决方案,

如果您的应用程序想要以多种语言将数据保存到数据库中,请确保您的数据库以UTF-8存储数据,并且与数据库的连接也是UTF-8(通常人们会忘记这一点)。

确保在建立连接时执行此查询:

mysql_query("SET NAMES utf8");

在您的应用程序端,用户输入数据,在表单上设置accept-charset属性。

<form accept-charset="utf-8">

为您的网站设置适当的元标记:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

或使用适当的HTTP标头为您的网站提供服务:

header('Content-Type: text/html; charset=utf-8');

总的来说问题是,一切都不在UTF-8,如果你把所有内容都放在UTF-8中,通常不需要担心任何事情。

参考Strategy for supporting unicode & multi language in PHP5

Storing and displaying unicode string (हिन्दी) using PHP and MySQL

答案 1 :(得分:0)

我也遇到了类似的情况,我用不同的方式解决了这个问题:

插入时使用您的查询:

Dim s As String = txtLanguage.Text '<----"音読み現代仮名遣い人名用漢字"
mySQL = "INSERT INTO multi_language(language, characters)" & _
        " VALUES ('Japanese', '" & encodeUTF(s) & "')"

在插入

之前对字符串进行编码
Public Function encodeUTF(ByVal inputString As String) As String '<-- function for encoding the input string
        Dim byt() As Byte = uni.GetBytes(inputString)
        encodeUTF = ""
        For Each b As Byte In byt
            encodeUTF &= b & ","
        Next
        Trim(Replace(encodeUTF, ",", ""))
End Function

在重新审核之前解码字符串

Public Function decodeUTF(ByVal inputString As String) As String '<-- function for decoding the input string
    Dim strs() As String
    strs = inputString.Split(",").ToArray
    Dim temp(strs.Length) As Byte
    Dim i As Integer
    For i = 0 To strs.Length - 2
        temp(i) = Byte.Parse(strs(i))
    Next
    decodeUTF = uni.GetString(temp)
    decodeUTF = decodeUTF.Substring(0, Len(decodeUTF) - 1)
End Function

将此文本检索到文本框时,您可以将查询用作:

 mySQL = "Select language, characters from multi_language"
 Reader = objdb.GetDataReader(mySQL)'<--- is a class function which returns the datareader
 If Reader.HasRows = True Then
    Reader.Read()
    txtlang.Text = objOdbcDataReader.Item("language")'<--- display the selected language
    txtchar.Text = objOdbcDataReader.Item("characters ")'<--- display the selected characters
 End If

答案 2 :(得分:-1)

也许你应该使用参数化查询(无论如何总是比字符串连接更好的选择,这很容易被sql注入)

修改你的查询以使用参数(我不确定对于mysql @param是否是正确的语法):

"INSERT INTO multi_language(language, characters) VALUES ('Japanese',  @val)"

然后将参数添加到您的查询中:

cmd = New OdbcCommand(mySQL, con)
cmd.Parameters.AddWithValue("@val", txtLanguage.Text)
cmd.ExecuteNonQuery()
con.Close()