在oracle中尝试保存连字符(-)时,为什么要保存倒置的问号?如何摆脱这个?
每当我尝试用语句中的连字符保存Oracle中的任何记录时,保存为Oracle中的倒置问号。只有当我将此插入查询与其他查询合并执行时才会发生这种情况,并使用SQL plus应用程序一次执行所有查询。但当我使用SQLDeveloper单独执行insert查询时,这种情况不会发生。为什么会发生这种情况,解决方法是什么?有多个不同的连字符/破折号/减号:在oracle中尝试保存连字符(-)时,为什么要保存倒置的问号?如何摆脱这个?,oracle,oracle11g,Oracle,Oracle11g,每当我尝试用语句中的连字符保存Oracle中的任何记录时,保存为Oracle中的倒置问号。只有当我将此插入查询与其他查询合并执行时才会发生这种情况,并使用SQL plus应用程序一次执行所有查询。但当我使用SQLDeveloper单独执行insert查询时,这种情况不会发生。为什么会发生这种情况,解决方法是什么?有多个不同的连字符/破折号/减号: SELECT UNISTR( '\002D' ) AS HyphenMinus, UNISTR( '\2010' ) AS Hyphen
SELECT UNISTR( '\002D' ) AS HyphenMinus,
UNISTR( '\2010' ) AS Hyphen,
UNISTR( '\2011' ) AS NonBreakingHyphen,
UNISTR( '\2012' ) AS FigureDash,
UNISTR( '\2013' ) AS EnDash,
UNISTR( '\2014' ) AS EmDash,
UNISTR( '\2015' ) AS HorizontalBar,
UNISTR( '\2043' ) AS HyphenBullet
FROM DUAL
只有-CHR45在基本ASCII字符集中。如果您的列仅支持此功能,则扩展字符集中的字符可能无法正确显示
您可能需要:
指向支持您正在使用的字符的内容;或
使用NVARCHAR2数据类型而不是VARCHAR2
仅在输入中使用支持的字符,并拒绝扩展字符集中包含ChatActer的任何字符串。
有多个不同的连字符/破折号/减号字符:
SELECT UNISTR( '\002D' ) AS HyphenMinus,
UNISTR( '\2010' ) AS Hyphen,
UNISTR( '\2011' ) AS NonBreakingHyphen,
UNISTR( '\2012' ) AS FigureDash,
UNISTR( '\2013' ) AS EnDash,
UNISTR( '\2014' ) AS EmDash,
UNISTR( '\2015' ) AS HorizontalBar,
UNISTR( '\2043' ) AS HyphenBullet
FROM DUAL
只有-CHR45在基本ASCII字符集中。如果您的列仅支持此功能,则扩展字符集中的字符可能无法正确显示
您可能需要:
指向支持您正在使用的字符的内容;或
使用NVARCHAR2数据类型而不是VARCHAR2
仅在输入中使用支持的字符,并拒绝扩展字符集中包含ChatActer的任何字符串。
SQL Developer是基于Java的,它不使用NLS_-LANG设置,但SQL*Plus使用,因此您必须正确设置NLS_-LANG 您没有告诉我们您使用的是哪一个连字符,请参阅MT0的答案。在你的问题中,你采用了U+002D CHR45,它是ASCII格式的-这肯定会产生任何问题 SQL*Plus从调用命令行继承字符集,您必须相应地设置NLS_LANG,例如:
C:\>chcp 1252
Active code page: 1252
C:\>set NLS_LANG=.WE8MSWIN1252
C:\>sqlplus ...
SQL> SELECT UNISTR( '\002D' ) AS HyphenMinus,
2 UNISTR( '\2010' ) AS Hyphen,
3 UNISTR( '\2011' ) AS NonBreakingHyphen,
4 UNISTR( '\2012' ) AS FigureDash,
5 UNISTR( '\2013' ) AS EnDash,
6 UNISTR( '\2014' ) AS EmDash,
7 UNISTR( '\2015' ) AS HorizontalBar,
8 UNISTR( '\2043' ) AS HyphenBullet
9 FROM DUAL;
H H N F E E H H
- - - - - - - -
- - - ¿ – — ¿ ¿
SQL>
您可以看到FigureDash、HorizontalBar和HyphenBullet不受支持,根据您的要求,您必须选择另一个字符集,例如UTF-8
C:\>chcp 65001
Active code page: 65001
C:\>set NLS_LANG=.AL32UTF8
C:\>sqlplus ...
查看以获取有关NLS语言设置的更多信息。SQL Developer基于Java,不使用NLS语言设置,但SQL*Plus使用,因此您必须正确设置NLS语言 您没有告诉我们您使用的是哪一个连字符,请参阅MT0的答案。在你的问题中,你采用了U+002D CHR45,它是ASCII格式的-这肯定会产生任何问题 SQL*Plus从调用命令行继承字符集,您必须相应地设置NLS_LANG,例如:
C:\>chcp 1252
Active code page: 1252
C:\>set NLS_LANG=.WE8MSWIN1252
C:\>sqlplus ...
SQL> SELECT UNISTR( '\002D' ) AS HyphenMinus,
2 UNISTR( '\2010' ) AS Hyphen,
3 UNISTR( '\2011' ) AS NonBreakingHyphen,
4 UNISTR( '\2012' ) AS FigureDash,
5 UNISTR( '\2013' ) AS EnDash,
6 UNISTR( '\2014' ) AS EmDash,
7 UNISTR( '\2015' ) AS HorizontalBar,
8 UNISTR( '\2043' ) AS HyphenBullet
9 FROM DUAL;
H H N F E E H H
- - - - - - - -
- - - ¿ – — ¿ ¿
SQL>
您可以看到FigureDash、HorizontalBar和HyphenBullet不受支持,根据您的要求,您必须选择另一个字符集,例如UTF-8
C:\>chcp 65001
Active code page: 65001
C:\>set NLS_LANG=.AL32UTF8
C:\>sqlplus ...
查看以获取有关NLS_LANG设置的更多信息。对于dual中的select“-”结果,您在SQLPlus中得到了什么;命令您的默认转义可能存在一些问题,我认为,默认情况下连字符不应该是特殊字符。当我尝试在sql plus中使用“-”获取结果时,它将返回0条记录。您键盘上的连字符是ASCII 45,所有字符集都支持连字符。您必须粘贴扩展连字符或其他有趣的内容。输入上述选择不应获得0条记录,双do有一条记录。键入该命令,您必须获得一个结果行;命令您的默认转义可能存在一些问题,我认为,默认情况下连字符不应该是特殊字符。当我尝试在sql plus中使用“-”获取结果时,它将返回0条记录。您键盘上的连字符是ASCII 45,所有字符集都支持连字符。您必须粘贴扩展连字符或其他有趣的内容。输入上述选择不应获得0条记录,双do有一条记录。键入正确的命令,您必须得到一个结果行。因为SQL Developer正确插入字符,所以第1个和第2个建议应该无效。显然,数据库和使用的数据类型正确地支持所需的字符。因为SQL Developer正确地插入了字符,所以第一个和第二个建议应该无效。显然,数据库和使用的数据类型正确地支持所需的字符。