oracle编码问题
<ul>
<li>
<p>1.查看oracle当前编码格式:</p>
<pre><code>SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET' ;
SELECT USERENV('language') FROM DUAL;</code></pre>
</li>
<li>
<p>2.以sysdba身份登录</p>
</li>
<li>
<p>3.关闭数据库 shutdown immediate;</p>
</li>
<li>
<p>4.以mount打来数据库,startup mount</p>
</li>
<li>5.设置session
<pre><code>SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;</code></pre></li>
<li>
<p>6.启动数据库<code>alter database open;</code></p>
</li>
<li>7.修改字符集<code>ALTER DATABASE CHARACTER SET ZHS16GBK;</code></li>
</ul>
<p><strong>提示</strong>我们的字符集:新字符集必须为旧字符集的超集:</p>
<pre><code>ALTER DATABASE character set INTERNAL_USE ZHS16GBK;</code></pre>
<ul>
<li>8.关闭,重新启动</li>
</ul>
<pre><code>shutdown immediate;
startup</code></pre>
<ul>
<li>9.查看服务器的配置。</li>
</ul>
<pre><code>vi /home/oracle/.bash_profile </code></pre>
<p><code>export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK</code></p>
<h2>问题二</h2>
<p><strong>背景:</strong>
项目上线时往数据库批量插入370条含有中文的数据,结果40条左右插入错误,返回如下错误信息</p>
<p>ORA-01756: quoted string not properly terminated
1
中文翻译:引用字符串不正确的终止</p>
<p><strong>原因</strong>
上线时是在xshell中用sqlplus往数据库中添加数据,而xshell客户端的编码是UTF-8,数据库的编码是GBK2312,插入中文时会经行转码,导致某些字符串可能转成中文符号,导致sql出现错误。</p>
<p><strong>总的来说,就是编码不同,进行转码,出现了中文符号。</strong></p>
<p><strong>解决方法</strong>
将xshell的编码改为和数据库一致的编码,再执行sql</p>
<h2>修改NLS_DATE_FORMAT的四种方式</h2>
<ul>
<li>
<p>在用户环境变量中指定(LINUX)
在用户的.bash_profile中增加两句:</p>
<pre><code>export NLS_LANG=AMERICAN ---这一句必须指定,否则下一句不生效。
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'</code></pre>
</li>
<li>
<p>在SQL*Plus的glogin.sql文件增加一句
<code>alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';</code></p>
</li>
<li>
<p>直接修改当前会话的日期格式
<code>SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';</code></p>
</li>
<li>修改数据库的参数,需要重启数据库后生效
<code>SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;</code></li>
</ul>