我有以下情况 -
用户可以在文本框中输入任何语言的文本,并且需要将其与语言名称一起存储在我的数据库中。以下是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;
当我直接在查询浏览器中执行查询时,它将正确执行,
我的编码有什么问题?我需要添加什么来获得正确的结果?
这是来自
的插入比较的屏幕截图答案 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()