use*_*603 5 sql oracle sqlplus
我用的是oracle 12G
\n\n当我@F:\\update.sql从 sql plus 运行时,它显示重音字符\xc3\xa9运行时,当我从 sqlplus 或 sql Developer 检索时,它会将重音字符显示为垃圾字符
当从 sql plus 运行单个语句时。现在,如果我从 sqlplus 检索它,它会显示正确的字符,但是当我从 sqldeveloper 检索它时,它再次显示垃圾字符。
\n\nupdate.sql内容是这样的
\n\nupdate employee set name =\'\xc3\xa9\' where id= 1;\nRun Code Online (Sandbox Code Playgroud)\n\n我想要的是当我运行 @F:\\update.sql 时,它应该以正确的格式插入/更新/检索它,无论它是来自 sqlplus 还是任何其他工具?
\n\n信息:- 当我跑步时
\n\n SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE \'%CHARACTERSET%\' \nRun Code Online (Sandbox Code Playgroud)\n\n我得到以下信息
\n\nPARAMETER VALUE\n------------------------------ ----------------------------------------\nNLS_CHARACTERSET WE8MSWIN1252\nNLS_NCHAR_CHARACTERSET AL16UTF16\nRun Code Online (Sandbox Code Playgroud)\n\n当我@.[%NLS_LANG%]从命令提示符运行时我看到
SP2-0310: unable to open file ".[AMERICAN_AMERICA.WE8MSWIN1252]"\nRun Code Online (Sandbox Code Playgroud)\n
我不熟悉 SQL Developer,但我可以提供 SQL*Plus 的解决方案。
\n\n\n\n首先确保文件F:\\update.sql以CP1252编码保存。许多编辑称这种编码ANSI是相同的(让我们跳过有关 termANSI和 之间差异的细节Windows-1252)
然后在运行脚本之前输入
\n\nchcp 1252
以便将您的编码切换cmd.exe为 CP1252。默认情况下,编码cmd.exe很可能是CP850或CP437,它们是不同的。
然后将NLS_LANG环境变量设置为字符集WE8MSWIN1252,例如
set NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
之后您的脚本应该可以与 SQL*Plus 一起正常工作。SQL*Plus 从父级继承编码(或“字符集”,如果您喜欢这个术语)cmd.exe。NLS_LANG告诉 Oracle 驱动程序您正在使用哪个字符集。
示例摘要:
\n\nchcp 1252\nset NLS_LANG=.WE8MSWIN1252\nsqlplus username/password@db @F:\\update.sql\nRun Code Online (Sandbox Code Playgroud)\n\n一些注意事项:为了cmd.exe永久设置编码,请参阅这个答案:Windows命令行中的Unicode字符 - 如何?
NLS_LANG可以分别设置为环境变量或在注册表中HKLM\\SOFTWARE\\Wow6432Node\\ORACLE\\KEY_%ORACLE_HOME_NAME%\\NLS_LANG(对于 32 位 Oracle 客户端)。HKLM\\SOFTWARE\\ORACLE\\KEY_%ORACLE_HOME_NAME%\\NLS_LANG(适用于 64 位 Oracle 客户端)。
对于 SQL Developer,请检查您的选项,应该可以在某个地方定义 SQL 文件的编码。
\n\n您并非被迫使用 Windows-1252。这同样适用于其他编码,例如WE8ISO8859P1(即 ISO-8859-1、chcp 28591)或 UTF-8。但是,如果使用 UTF-8,您的 SQL 脚本可能包含数据库字符集 WE8MSWIN1252 不支持的字符。这些字符将被占位符替换(例如\xc2\xbf)。