使用更新脚本

时间:2017-06-08 07:40:11

标签: sql oracle character-encoding oracle-sqldeveloper toad

我尝试使用Toad 12.1 DBA和SQLDeveloper来实现我的目标,但我得到了相同的结果。

当我在网格结果中更新NVARCHAR2单元格时,我可以设置并提交“€”符号作为值。但是当我执行更新脚本来执行相同的操作时,它会打印'?'字符作为数据。

以下是我在网格中编辑和提交数据时的结果:

enter image description here

当我使用更新脚本执行相同操作时,问题出现了:

enter image description here

我尝试使用不同的NLS_LANG参数但它们也不起作用。 AMERICAN_AMERICA.WE8ISO8859P9 AMERICAN_AMERICA.AL16UTF16

数据库NLS参数在这里:

SELECT * FROM NLS_DATABASE_PARAMETERS where PARAMETER in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');

PARAMETER               VALUE
------------            ------------
NLS_CHARACTERSET        WE8ISO8859P9
NLS_NCHAR_CHARACTERSET  AL16UTF16

为简单表创建脚本:

CREATE TABLE AAA
(
  NVARCHAR2COL  NVARCHAR2(50)
);

我也尝试使用sqlplus来执行更新脚本,但它也将问号打印为数据。

编辑:还有一件事,使用带有unistr函数的更新脚本,但我需要使用可读文本更新数据:

UPDATE AAA SET NVARCHAR2COL = unistr('\20AC');
COMMIT;

解决方案:在我的JPA实体上使用@Nationalized注释获取NVARCHAR字段解决了我的问题。

1 个答案:

答案 0 :(得分:0)

Text Literal的默认数据类型是CHAR。 CHAR字符串只能包含ASCII符号,并且ASCII表中没有axios.all([ axios.get('https://jira.example.co.uk/rest/api/2/search?jql=project = 10005 AND fixVersion = versionID ORDER BY priority DESC, key ASC', headers), axios.get('https://jira.example.co.uk/rest/api/2/search?jql=status IN (Reported) AND project = 10005 AND fixVersion = versionID ORDER BY priority DESC, key ASC', headers), axios.get('https://jira.example.co.uk/rest/api/2/search?jql=status IN (Confirmed) AND project = 10005 AND fixVersion = versionID ORDER BY priority DESC, key ASC', headers)) ]) .then(axios.spread(function (response1, response2, response3) { ... } 符号,因此在语句编译期间'€'将转换为'€'

要使用国家字符集字符串值,必须以'?'为前缀。 N函数将编译时的数据转换为NCHAR。

N应该有用。

可以使用UPDATE AAA SET NVARCHAR2COL = N'€';

更新网格中的值时,开发工具会为用户透明地执行相同操作。