在 SQL Server 中插入'€'符号并获取'?'
Inserting '€' symbol in SQL Server and getting an '?'
我在C++中有一个DLL库,可以插入一些数据。有一个 nvarchar 字段,我在其中插入来自用户的数据。
在插入之前,我尝试将字符串从Latin1
(ISO-8859-1
)转换为UTF-8
,以便正确插入其他符号:重音符号和其他特殊符号(á,ñ,ó等)。但是没有运气(好吧,其他符号被正确插入,但欧元符号没有)。无论我做什么,它都会不断插入?
而不是每个€
。
我的专栏有SQL_Latin1_General_CP1_CI_AI
编码。
例:
插入字符串:
something € something
在数据库中的结果:
something ? something
编辑:
该字符串来自将字符串传递给C++ dll 的桌面 .NET 应用程序。该字符串是使用普通的 .NET 文本框捕获的,并存储在普通字符串上。
字符串在 C++/CLI 包装器中转换如下:
static std::string strConvert(String ^source) {
return marshal_as<std::string>(source);
}
然后通过 ODBC
将 std::string 插入数据库。
创建具有支持欧元字符的字符集的列。
CREATE TABLE MyTable
(
MyEuroColumn VARCHAR(5)
CHARACTER SET utf8
COLLATE utf8_general_ci
);
如果您的编辑器不支持 Unicde,您可以像这样插入它:
select concat('Five ', _ucs2 0x20AC, ' please!')
您还可以将欧元符号存储在其他字符集中:
UTF-8 0xE282AC
UCS-16 0x20AC
ISO-8859-15 (latin-9) 0xA4
一种解决方案是避免编码,让 SQL Server 手动处理此特定字符。
只需在插入字符串之前将字符串中的每个€
符号都替换为' + CHAR(128) + '
。
parValue = replace(parValue, "€", "' + CHAR(128) + '");
相关文章:
- 获取隐式转换溢出从无符号到已签名的警告
- 如何从二进制文件中的给定符号中获取调用程序图
- 使用jsoncpp-NuGet包时获取未解析的外部符号
- 获取未定义的符号:尝试使用Clang地址清理器时__asan_memset
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- 获取两个无符号整数 C++ 乘积的高 32 位的有效方法
- 在C 中获取Ncurses Chtype或未符号字符的整数值
- 尝试将返回无符号值的函数分配给指向无符号的指针时,继续获取 SIGSEGV
- 使用字符时获取 ╠ 符号 'e'
- 在C++中以字符串形式获取ECL符号名称
- 如何从 c++ 或 cocos2dx 中的表情符号中获取 unicode
- 获取有关 ELF 中的函数和相关符号的信息
- 如何按位获取数字而不是求反符号位
- 从文件输入中获取奇怪的符号
- OSX "ld" : 如何显示未解析符号的损坏名称?如何获取地图文件?
- 如何获取标准 C/C++ 中的文件分隔符符号:/ 或 \
- 获取在GDB便利性变量中持有的价值的符号信息
- 在Python中获取从有符号整数到无符号整数的转换
- 获取网站来源,获取额外的符号,winsock
- 为不明确的符号获取错误,需要帮助将其删除