<p>我认为你不应该再耍这种恶作剧了。NLS_LANG只需设置为客户端的默认编码。看看更可靠的选择:</p>
<ol>
<li>扩展数据库的字符集以允许在VARCHAR列中使用这些字符。在</li>
<li>将此列升级为NVARCHAR。您也许可以为这个列使用一个新名称,并使用旧名称创建一个VARCHAR计算列,供遗留应用程序读取。在</li>
<li>保持数据库原样,但在输入数据时检查数据,并用可接受的等效ASCII字符替换所有非ASCII字符。在</li>
</ol>
<p>哪个选项最好取决于非ASCII字符的常见程度。如果有更多相同问题的表,我建议选择1。如果这是唯一的表,选项2。如果整个表中只有几个非ASCII字符,并且它们的丢失不是什么大问题:选项3。在</p>
<p>如果一个新的或未定义的数据被强行插入数据库,那么当你不能正确地将一个新的或未定义的数据插入数据库中时,你会发现新的或未定义的数据插入数据库。在</p>
<hr/>
<p>编辑:请参阅Oracle对<a href="http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html" rel="nofollow">NLS_LANG faq</a>中类似设置示例的评论(我的重点是):</p>
<blockquote>
<p>A database is created on a UNIX system with the US7ASCII character
set. <strong>A Windows client connecting to the database works with the
WE8MSWIN1252 character set</strong> (regional settings -> Western Europe /ACP
1252) and the DBA, use the UNIX shell (ROMAN8) to work on the
database. <strong>The NLS_LANG is set to american_america.US7ASCII on the
clients</strong> and the server.</p>
<p><strong>Note:</strong></p>
<p><strong>This is an INCORRECT setup to explain character set conversion, don't
use it in your environment!</strong></p>
</blockquote>