在SQL Server中插入“€”符号并获取“?”

时间:2016-01-25 11:12:07

标签: c++ sql sql-server-2008 encoding

我在C ++中有一个DLL库,它插入了一些数据。有一个nvarchar字段,我在其中插入来自用户的数据。

我尝试在插入之前将字符串从Latin1ISO-8859-1)转换为UTF-8,以便正确插入其他符号:重音和其他特殊符号(á,ñ,ó,等等。)。但没有运气(好吧,其他符号被正确插入,但不是欧元符号)。无论我做什么,它都会一直插入?而不是每

我的专栏有SQL_Latin1_General_CP1_CI_AI编码。

示例:

插入字符串:

something € something

数据库中的结果:

something ? something

修改

该字符串来自桌面.NET应用程序,它将字符串传递给C ++ DLL。该字符串使用普通的.NET TextBox捕获,并存储在普通的String中。

字符串在C ++ / CLI包装器中转换为:

static std::string strConvert(String ^source) {
    return marshal_as<std::string>(source);
}

然后通过ODBC将std :: string插入数据库。

2 个答案:

答案 0 :(得分:0)

创建一个包含支持欧元字符的字符集的列。

CREATE TABLE MyTable
(
    MyEuroColumn VARCHAR(5)
      CHARACTER SET utf8
      COLLATE utf8_general_ci 
);

如果您的编辑器不支持Unicde,您可以像这样插入:

select concat('Five ', _ucs2 0x20AC, ' please!')

您还可以将欧元符号存储在other个字符集中:

UTF-8                  0xE282AC
UCS-16                 0x20AC
ISO-8859-15 (latin-9)  0xA4

答案 1 :(得分:0)

一种解决方案是避免编码,让SQL Server手动处理这个特定字符。

在插入之前,只需将字符串中的每个符号替换为' + CHAR(128) + '即可。

parValue = replace(parValue, "€", "' + CHAR(128) + '");