我的MySQL数据库可以很好地存储欧元符号(因为我已经使用本机MySQL客户端(HeidiSQL)进行了测试)。但是使用MySQL .NET连接器,我的ASP.NET应用程序正在使用我无法插入或从数据库中读取它:我只得到一个?回归。可能的原因是什么?
答案 0 :(得分:5)
我建议在连接字符串中明确指定编码:
服务器=本地主机;数据库=架构; UID = FOO; PWD =巴;的字符集= UTF8 强>
它通常可以解决MySQL的Connector / NET与编码相关的大多数问题。
答案 1 :(得分:2)
我会说MySQL .NET连接器在连接时设置一些与整理相关的环境变量;在HeidiSQL和.NET上比较这些查询的输出:
SHOW VARIABLES LIKE "character_set_%";
SHOW VARIABLES LIKE "collation_%";
他们都应该包含utf8-something。如果没有,您可以在运行时as in the manual更改它们。
答案 2 :(得分:0)
以下.Net命令可以为您的数据库编码,然后将它们解码为原始符号...
System.Web.HttpUtility.HtmlEncode()
System.Web.HttpUtility.HtmlDecode()
答案 3 :(得分:0)
据推测,您正在将欧元符号插入一个键入NVARCHAR的字段,否则您将无法正确插入和检索欧元符号与其他客户?
您是否在SQL语句中使用正确的语法来插入和检索Unicode数据?
要做到这一点,你必须在任何unicode字符串之前使用N说明符字符,否则它将被静默转换为单字节编码并成为一个不可读的字符,例如。
//Inserting Unicode data
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "INSERT INTO SOME_TABLE (someField) VALUES (N'@text')";
cmd.Parameters.Add("text", "Some Unicode Text");
cmd.Connection = conn;
cmd.ExecuteNonQuery();
//Selecting Unicode data
MySqlCommand select = new MySqlCommand();
select.CommandText = "SELECT * FROM SOME_TABLE WHERE someField=N'@text'";
cmd.Parameters.Add("text", "Some Unicode Text");
cmd.Connection = conn;
//Execute your query and process your Results...
答案 4 :(得分:0)
我遇到了类似的问题,尝试将数据从Sybase 12.5导入到MS SQL Server 2005中。
基本上,如果编码正确,MSSQL会将£和欧元标记在varchar中很好,这很好,但我没有意识到Sybase正在输出数据为windows-1252(西欧)而不是UTF- 8这导致像£和欧元符号这样的数据被导入程序翻译为'?'。告诉导入数据被编码为1252的导入程序解决了这个问题。
如果您在读取时将数据库的输出编码为1252,则应该输出正确的符号。
例如:
System.Text.Encoding enc = System.Text.Encoing.GetEncoding(1252);
MySqlDataReader msdr = command.ExecuteReader();
while(msdr.Read())
{
...
string val = enc.GetString(enc.GetBytes(msddr.GetString(mssdr.GetOrdinal("varhcar_field"))));
...
}
答案 5 :(得分:-1)
您是否在输出页面中正确设置了字符集?
即<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
之类的东西
或charset=iso-8859-15
但不是 charset=iso-8859-1