MySQL ::连接器/净欧元符号

时间:2009-11-06 13:50:19

标签: asp.net mysql localization special-characters

我的MySQL数据库可以很好地存储欧元符号(因为我已经使用本机MySQL客户端(HeidiSQL)进行了测试)。但是使用MySQL .NET连接器,我的ASP.NET应用程序正在使用我无法插入或从数据库中读取它:我只得到一个?回归。可能的原因是什么?

6 个答案:

答案 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