我在C ++中有一个DLL库,它插入了一些数据。有一个nvarchar字段,我在其中插入来自用户的数据。
我尝试在插入之前将字符串从Latin1
(ISO-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插入数据库。
答案 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) + '");