学习资料

学习的笔记


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&gt;ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL&gt; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL&gt; 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&gt; alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';</code></p> </li> <li>修改数据库的参数,需要重启数据库后生效 <code>SQL&gt; alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;</code></li> </ul>

页面列表

ITEM_HTML