4

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

4

6 回答 6

5

我建议在连接字符串中明确指定编码:

服务器=localhost;数据库=schema;Uid=foo;密码=bar;字符集=utf8 ;

它通常用 MySQL 的 Connector/NET 解决大多数与编码相关的问题。

于 2009-11-06T13:59:05.500 回答
2

我会说 MySQL .NET 连接器在连接时设置了一些与排序规则相关的环境变量;在 HeidiSQL 和 .NET 上比较这些查询的输出:

SHOW VARIABLES LIKE "character_set_%"; 
SHOW VARIABLES LIKE "collation_%";

它们都应该包含 utf8-something。如果没有,您可以在运行时更改它们,如手册中所述

于 2009-11-13T12:49:46.330 回答
0

以下 .Net 命令可以为您的数据库对这些进行编码,然后将它们解码为原始符号...

System.Web.HttpUtility.HtmlEncode()

System.Web.HttpUtility.HtmlDecode()
于 2009-11-06T13:58:43.673 回答
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...
于 2009-11-13T14:14:16.353 回答
0

我遇到了类似的问题,尝试将数据从 Sybase 12.5 导入 MS SQL Server 2005。

如果编码正确,基本上MSSQL在varchar中存储£和欧元符号很好,这很好,但我没有意识到Sybase将数据输出为windows-1252(西欧)而不是UTF-8,这导致像 £ 和欧元符号这样的数据被导入程序翻译为“?”。告诉导入程序传入的数据被编码为 1252 解决了这个问题。

如果您在阅读时将 DB 的输出编码为 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"))));
    ...
}
于 2009-11-14T18:09:20.227 回答
-1

您是否在输出页面中正确设置了字符集?即类似<META http-equiv="Content-Type" content="text/html; charset=UTF-8">charset=iso-8859-15不类似的东西charset=iso-8859-1

于 2009-11-12T16:21:09.387 回答