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

Inserting '€' symbol in SQL Server and getting an '?'

本文关键字:符号 获取 SQL 插入 Server      更新时间:2023-10-16

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

在插入之前,我尝试将字符串从Latin1ISO-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) + '");