gpt4 book ai didi

oracle - Oracle NLS_NCHAR_CHARACTERSET 和 NLS_CHARACTERSET 之间的区别

转载 作者:行者123 更新时间:2023-12-03 06:51:57 32 4
gpt4 key购买 nike

我想知道两者之间的区别 NLS_NCHAR_CHARACTERSETNLS_CHARACTERSET Oracle 中的设置?

据我了解,NLS_NCHAR_CHARACTERSET用于NVARCHAR数据类型和 NLS_CHARACTERSET适用于 VARCHAR2 数据类型。

我尝试在我的开发服务器上测试这一点,我当前的设置为 CHARACTERSET如下:

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET US7ASCII

然后我将一些汉字值插入到数据库中。我将这些字符插入到名为 data_<seqno> 的表中并更新了 ADDRESS 的列和ADDRESS_2分别是VARCHAR2列。根据我对 NLS_CHARACTERSET 当前设置的理解US7ASCII ,不应该支持中文字符,但它仍然显示在数据库中。是NLS_NCHAR_CHARACTERSET优先于这个吗?

谢谢。

最佳答案

总的来说,您的所有观点都是正确的。 NLS_NCHAR_CHARACTERSET 定义 NVARCHAR2 等的字符集。等人。列,而 NLS_CHARACTERSET 用于 VARCHAR2

Why is it possible that you see Chinese characters with US7ASCII?

原因是,您的数据库字符集和客户端字符集(即参见NLS_LANG值)都是US7ASCII。您的数据库使用 US7ASCII 并且它“认为”客户端也使用 US7ASCII 发送数据。因此,它不会对字符串进行任何转换,数据从客户端逐位传输到服务器,反之亦然。

因此,您可以使用 US7ASCII 实际上不支持的字符。请注意,如果您的客户端使用不同的字符集(例如,当您在 Windows 应用程序中使用 ODP.NET 托管驱动程序时),数据将是垃圾!此外,如果您考虑数据库字符集迁移,您也会遇到同样的问题。

另一个注意事项:我认为其他字符集不会有相同的行为,例如例如,如果您的数据库和客户端都使用 WE8ISO8859P1。另请注意,您实际上配置错误。您的数据库使用字符集 US7ASCII,您的 NLS_LANG 值也是 US7ASCII(很可能根本没有设置,Oracle 默认将其设置为 >US7ASCII) 而是 SQL*Plus 的真实字符集。您的 cmd.exe 终端很可能是 CP950CP936

如果您想正确设置所有内容,您可以设置环境变量 NLS_LANG=.ZHT16MSWIN950(Oracle 似乎不支持 CP936)或在运行 sqlplus.exe 之前更改代码页 使用命令 chcp 437。通过正确的设置,您将不会看到任何您可能期望的中文字符。

关于oracle - Oracle NLS_NCHAR_CHARACTERSET 和 NLS_CHARACTERSET 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710360/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com