首页 > 后端 > 知识 > superset支持哪些数据库,ORACLE不同字符集怎么到数据

superset支持哪些数据库,ORACLE不同字符集怎么到数据

来源:整理 时间:2025-06-21 22:38:05 编辑:黑码技术 手机版

本文目录一览

1,ORACLE不同字符集怎么到数据

你想说两个不同字符集的ORACLE数据库,怎么把数据相互移植。一种方法:创建DBLINK,使用dblink读过来,然后create一个就行啦。另一方法:使用oracle的UTL_RAW包转换。
如何更改oracle字符集 国内最常用的oracle字符集zhs16gbk(gbk 16-bit simplified chinese)能够支持繁体中文,并且按照2个字符长度存储一个汉字。utf8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。 oracle支持字符集的更改,但是utf8是oracle中最大的字符集,也就是说utf8是zhs16gbk的严格超集。 对于子集到超集的转换,oracle是允许的,但是对于超集到子集的转换是不允许的。一般对于超集到子集的转换,建议是通过dbca删除原来的数据库,重新再建库,选择正确的字符集,然后导入备份。 我的方案是:先备份数据,然后强制转换字符集从utf8到zhs16gbk,然后导入备份数据。如果不行,才来重新建库,设置字符集zhs16gbk,导入备份数据。如果这还不行,就把更改字符集从zhs16gbk到utf8(这是安全的),再导入备份数据,恢复到原始状况。这样就有可能避开重新建库的麻烦。 1. 备份数据库中所有用户的数据 以oracle用户登陆,执行以下命令 # export nls_lang = “simplified chinese_china.utf8” 保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。 2. 评估utf8转换成zhs16gbk的风险 转换之前,要使用oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。 先安装属于 csmig 用户的一套表和过程。以oracle用户登陆unix, #sqlplus “/ as sysdab” sql>@$oracle_home/ rdbms/admin/csminst.sql sql>exit # $oracle_home\bin\csscan -help 可以更清楚如何使用csscan。 # $oracle_home/bin/csscan system/sunday user=mmsc fromchar=utf8 tochar=zhs16gbk array=102400 process=3 > csscan.log 以上命令意思是扫描用户:mmsc中的所有数据,从字符集utf8更改为zhs16gbk的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。 查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“exceptional”的情况,因此可以更放心一点。 3. 更改数据库的字符集为zhs16gbk 前面说过,通过命令“alter database characeter set xxxx”,实现从超集到子集的转换,在oracle是不允许的。但是该命令,提供这样的命令方式: alter database character set internal_convert/ internal_use xxxx 这是oracle的非公开命令。“在使用这个命令时,oracle会跳过所有子集及超集的检查,在任意字符集之间进行强制转换,所以,使用这个命令时你必须十分小心,你必须清楚这一操作会带来的风险”。 以oracle用户登陆unix, #sqlplus “/ as sysdba” sql> shutdown immediate; sql> startup mount; sql> alter session set sql_trace=true; sql> alter system enable restricted session; sql> alter system set job_queue_processes=0; sql> alter system set aq_tm_processes=0; sql> alter database open; sql> alter database character set zhs16gbk; //如果不使用“internal_use”参数,系统会提示出错: //error at line 1: //ora-12712: new character set must be a superset of old character set sql> alter session set sql_trace=false; sql> shutdown immediate; sql> startup; 此时,检查一下数据库的字符集是否更改过来 sql> select value$ from props$ where name=nls_characterset; value$ ----------------- zhs16gbk 紧接着检查一下数据库中简体中文、繁体中文是否正常,不会出现乱码。 sql>select spid,spname,spshortname from spinfovisual_hk …... 非常不幸,我看到了一堆乱码,这也证明了oracle不支持字符集从超集到子集的更改,当时心里很紧张,很怕失败,从而恢复到原样。 但是根据以前的验证,把utf8下的备份导入到zhs16gbk中去,是ok的,所以继续尝试。 4. 导入备份的用户数据 还是以oracle用户登陆unix, 先删除库中的用户mmsc: #sqlplus “/ as sysdba” sql>drop user mmsc cascade; sql>exit 再运行createuser.sql,生成mmsc用户。 然后使用原来的备份文件,导入到mmsc用户中: 注意:先设置nls_lang要与当前数据库的一致:zhs16gbk。这样,导出时用户会话的nls_lang为utf8,与原先的数据库字符集一致;现在为zhs16gbk,与此时的数据库字符集一致。这样,导入时,就会进行字符转换。 # export nls_lang = “simplified chinese_china.zhs16gbk” #imp mmsc/mmsc@mdspdb file=dsmpd113_user_mmsc.dmp ignore=y fromuser=mmsc touser=mmsc 马上查看数据库中简体、繁体中文,哈哈,没有乱码了,一切显示正常。 紧接着进行验证,也证明了:1个汉字此时只占用2个字符长度。问题解决了!

ORACLE不同字符集怎么到数据

2,电脑怎么设置开机密码

可从控制面板里面设置,具体步骤为: 控制面板-用户帐户-更改帐户/创建一个新帐户-创建密码 即可。 当然如果怕忘的话,还可以将 密码提示也设置好
第一种是进入windows的时候有一个用户的选择进入,这个时候的密码设置方法如下。 在控制面板里打开“用户”,然后找到密码选项,去设置就行了。 第二种是在进入windows之前的一种设置,这个密码决定了用户是不是能对电脑进行操作。方法如下。 开机时按del键进入bios设置项,在super password选项中可以设置开机密码。确定两次即可。 追问: 如果我密码设置下忘记了怎么办?那不是进不了? 回答: 推荐以下两种破解方法: 方法一: (1)启动电脑,使用dos启动盘(比如:windows98启动盘)进入纯dos状态。 (2)在dos提示符下,根据下面步骤操作: cd\(切换到根目录) cdwindows\system32(切换到系统目录) mkdirtemphack(创建临时文件夹) copylogon.scrtemphacklogon.scr(备份logon.scr) copycmd.exetemphackcmd.exe(备份cmd.exe) dellogon.scr(删除logon.scr) renamecmd.exelogon.scr(将cmd.exe改名为logon.scr) exit(退出) (3)重启电脑,在登录等待画面出现后静静等候,如果没有修改屏幕保护时间,大约10分钟,系统就会自动启动登录屏保程序,可是由于logon.scr已经由cmd.exe代替了,所以系统就启动了cmd.exe,进入命令行提示符状态。 (4)这时,我们可以使用命令:netuserpassword来修改密码了。 假设有一个超级管理员的帐号是admin,希望重新设置其密码为admin,那么可以使用命令:netuseradminadmin,回车后即可更改密码。 (5)接下来,想不想进入桌面系统看看硬盘上面的东西呢?在命令行提示符状态下输入explorer命令试试看,是不是很顺利地进入了windows的桌面? 小提示 如果你有一个普通用户帐号,利用上面介绍的方法稍作改动就可以把它变成超级管理员administrator帐号。 备份logon.scr和usermgr.exe,将第二步中的cmd.exe全部换成usermgr.exe,然后重启,静静等候,这时出现的不是命令行提示符,而是用户管理器,这时我们就有权限把自己加到administrator组了。 方法二 由于windowsxp在安装过程时,首先以administrator默认登陆,有不少朋友没有注意到为它设置密码,而是根据要求创建一个个人的帐户,以后进入系统后即使用此帐户登陆,而且在windowsxp的登录界面中也只出现这个创建的用户帐号,而不出现administrator,实际这个帐号依然存在,而且密码为空。 知道了这个原理,你可以直接正常启动,在登陆界面出现后,按ctrl+alt,再按del两次,即可出现经典登陆画面,此时在用户名处填入administrator,密码为空即可进入,接下来,就可以进入“控制面板”的“用户和密码”,修改你想要修改的用户的密码即可。
BIOS密码设置一点通 适当设置BIOS密码可以为电脑带来一定程度的保护。设置密码的目的不外乎两种: 一是防止别人擅自更改CMOS设置;二是防止别人进入自己的电脑(包括进入操作系统等)。针对这两种情况,我们可以分别设置开机密码和进入CMOS的密码。设置密码时,必须在开机时按热键进入CMOS设置程序。一般来说,Award和Phoneix BIOS按“Del”或“Ctrl+Alt+Esc”键,AMI BIOS按“Del”或“Esc”键。 下面以Award BIOS为例介绍一下具体步骤。在CMOS设置程序中有两个菜单:“Set Supervisor Password”和“Set User Password”。这就是“设置超级用户密码”和“设置用户密码”菜单(如图1)。 不过,还要分别设置“Advanced BIOS Features”主菜单中的“Security Option”子菜单的“Setup”和“System”选项,才能达到我们如前所述目的(如图2)。 注意:在AMI BIOS中相应的子菜单是“Password Check”;而Award和Phoneix BIOS则需要把“Aministrator Password is”子菜单选项设为“Enabled”才会令所有密码设置生效。 1. 设置进入CMOS的密码。一般情况下,“Security Option”菜单上的默认选项是“Setup”,这时我们只要在“Set Supervisor Password”和“Set User Password”菜单上任意设定一个密码就可以了。把光标移到“Set User Password”上回车,出现一对话框(如图3),这时我们可以输入一至八位字符的任意密码(包括英文、数字、空键,要注意英文的大小写是有区别的)。连续输入两次相同的密码,再把光标移到“Save && Exit Setup”上保存后退出,CMOS密码设置就会生效,下次进入CMOS时就会弹出一对话框要求输入密码。 2. 设置开机密码。首先把“Security Option”菜单上的选项改为“System”,再用同上方法设置密码。设置完成后,无论是开机后进入操作系统或CMOS之前,系统都会要求输入正确的密码。 关于“Set Supervisor Password”和“Set User Password” 菜单,顾名思义,前者的权限比后者高。一般情况下我们单独对两者之一进行设置时,效果会一样。但当同时对两者进行设置后,就会发现如用 “Set User Password”进入CMOS时,只能修改“Set User Password”一项;如用 “Set Supervisor Password”进入CMOS时就可以修改所有的菜单选项,包括“Set User Password”。 最后提示一下,当要取消所设的密码时,只要进入CMOS中把光标移到相应的密码设置菜单上连续按两次回车,当出现“Password Disabled”提示就可以了
对于Windows XP,设置开机密码的方法一般有三种,即系统用户密码、系统启动密码和BIOS密码。其设置方法分别如下: 一、系统中设置用户密码的方法: 开始→控制面板→用户帐户→选择你的帐户→创建密码→输入两遍密码→按“创建密码”按钮即可。 如果要取消密码,只要在第2步要求输入新密码时直接回车即可。 二、系统中设置启动密码的方法: Windows XP除了可以在控制面板的用户帐户里设置“用户密码”来确保系统安全外,系统还提供了一个更安全有效的“系统启动密码”,这个密码在开机时先于“用户密码”显示,而且还可以生成钥匙盘。如果你设置了“系统启动密码”,系统就更安全了。Windows XP设置“系统启动密码”的方法如下: 单击“开始”“运行”,在“运行”对话框中输入“Syskey”(引号不要输入),按“确定”或回车,弹出“保证Windows XP帐户数据库的安全”对话框,在对话框中点击“更新”按钮,弹出“启动密码”对话框,选中“密码启动”单选项,在下面输入系统启动时的密码,按“确定”按钮即可。 要取消这个系统“启动密码”,按上面的操作后在“启动密码”对话框中选中“系统产生的密码”,再选中下面的“在本机上保存启动密码”即可,确定后启动密码就会保存到硬盘上,下次启动时就不会出现启动密码的窗口了。 “启动密码”在出现登录画面之前显示,只有输入正确的启动密码后,才会显示登录画面,用户才能输入用户名和登录密码完全登录系统。如此,系统就有二重密码保护。 三、BIOS中设置密码的方法(不同机器有所不同): 1、开机按Del键进入CMOS设置,将光标移到“Advanced BIOS Features(高级BIOS功能设置)”回车,打开“Advanced BIOS Features”页面,找到“Security Option(检查密码方式)”或“Password Check(检查密码方式)”,将其设置为“System(系统)”(注:该项有两个设定值System和Setup,设置为System时开机进入CMOS设置和进入操作系统均要输入密码;设置为Setup时仅开机进入CMOS设置要输入密码),按Esc键回到主页面; 2、在主页面将光标移到“Set Supervisor Password(超级管理员密码)”回车,在出现的窗口中输入密码并回车,在出现的窗口中再次输入同一密码并回车,CMOS便回将密码记录下来并返回主页面。 3、在主页面将光标移到“Save & Exit(存储退出)”回车,按Y键,再回车即可。 在第2步选择“Set User Password(设置用户密码)”可以设置用户密码,用户密码与超级管理员密码的区别是:用用户密码进入CMOS设置只能查看不能修改。 上述三种密码中以系统启动密码的安全性最高,用户密码其次,BIOS密码的安全性最低。BIOS密码可以通过将主板上的电池取下而消除;用户密码在网上也可以找到很多破解方法;但启动密码还很难找到破解方法。建议同时设置启动密码和用户密码,这样就有双重密码保护,不但开机时要输入密码,而且在暂时离开时可以通过同时按Windows徽标键(Ctrl和Alt之间的那个键)和字母L键锁定计算机(锁定时,计算机返回登录的画面,必须输入用户密码才能返回系统进行正常操作),使他人无法使用
在CMOS里有两个设置密码的地方。一个是高级用户密码,一个是一般用户密码。 电脑在启动时会询问一个密码,回答其中一个密码电脑就可以启动;如果要进入CMOS设置则需要高级用户密码 电脑将CMOS设置认为是高度机密,防止他人乱改,而高级密码比用户密码的权限就高在CMOS的设置上。 简单地说,如果两个密码都设好了,那么用高级密码可以进入工作状态,也可以进入CMOS设置,而用户密码只能进入工作,也能进入CMOS修改用户自身的密码,但除此之外不能对CMOS进行其它的设置。如果只设置了一个密码,无论是谁,都同时拥有这两个权限。 将光标移到密码设置处,回车,输入密码,再回车,电脑提示重新再输入密码确认一下,输入后再回车就可以了;如果想取消已经设置的密码,就在提示输入密码时直接回车即可,电脑提示密码取消,请按任意键,按键后密码就取消了。 特别注意,一旦设置了密码,就要牢牢记住。如果你给电脑设置了开机密码,又把它忘耍?憔臀薹ㄊ褂玫缒怨ぷ髁耍?饣岷艿⑽笫虑椤? 要是真的忘记了密码,无法启动电脑了,对于高手来说,拆开电脑主机然后进行CMOS放电,就可以让电脑将密码忘掉,但这要找对电脑硬件非常熟悉的人而且要参照主板说明书才可以办到,而且,CMOS在忘掉密码的同时,把所有设定好的值也都忘掉了,必须重新全部设置。最好把密码记牢了! 高级密码就是CMOS里面的SUPERVISON PASSWORD里的内容 一般用户密码就是里面的USER PASSWORD 进入CMOS: DELL的新机型基本都是按F2键 有些按DEL键 有的是按F10键
第一种方法开机进BIOS设置!选择User PassWord密码设置密码后保存并重新启动会要求密码该密码要求键盘为PS/2键盘或者你的机器支持开机USB键盘识别可以!如果你使用的USB键盘谨慎使用第二种方法直接控制面板 用户 为你的帐号设置密码就可以了第三种方法使用第三方软件,开机锁屏!第四种方法设置屏幕保护密码

电脑怎么设置开机密码

3,java问题

import java.awt.TextArea; import java.awt.event.*; import java.io.File; import javax.swing.*; public class Chess extends JFrame implements ActionListener{ public JMenu menu=new JMenu("文件"); public JMenuBar bar; public JMenuItem write; public JMenuItem read; public JMenuItem exit; public TextArea ta=new TextArea(); public Chess(){ this.setLayout(null); this.setTitle("MyFie"); this.setSize(500,500); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent arg0) { // TODO Auto-generated method stub super.windowClosing(arg0); System.exit(0); }}); ta=new TextArea(); ta.setBounds(0,0,500,500); this.add(ta); JMenuItem item=null; write=new JMenuItem("保存文件"); write.addActionListener(this); read=new JMenuItem("打开文件"); read.addActionListener(this); exit=new JMenuItem("退出"); exit.addActionListener(this); menu.add(write); menu.add(read); menu.add(exit); bar=new JMenuBar(menu); this.setJMenuBar(bar); }//gz public void actionPerformed(ActionEvent e) { if(e.getActionComm胆储册肥夭堵差瑟倡鸡and().equals("保存文件")){ JFileChooser jfc=new JFileChooser(); jfc.showOpenDialog(this); File f=jfc.getSelectedFile(); // if(f!=null){ // if(ta.saveToFile(f)){ // JOptionPane.showMessageDialog(this,"保存成功!"); // }else{ // JOptionPane.showMessageDialog(this,"保存文件失败!"); // } // } return; } if(e.getActionCommand().equals("打开文件")){ JFileChooser jfc=new JFileChooser(); jfc.showOpenDialog(this); File f=jfc.getSelectedFile(); // if(f!=null){ // if(!ta.loadFromFile(f)){ // JOptionPane.showMessageDialog(this,"文件格式不正确或已损坏!"); // } // } return; } if(e.getActionCommand().equals("退出")){ System.exit(0); } } public static void main(String ff[]){ (new Chess()).setVisible(true); } }
import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.PrintWriter; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; public class Chess extends JFrame implements ActionListener { private static final long serialVersionUID = -5963473828896950407L; public JMenu menu = new JMenu("文件"); public JMenuBar bar = new JMenuBar(); public JMenuItem write; public JMenuItem read; public JMenuItem exit; public class MyTextArea extends TextArea { private static final long serialVersionUID = 1L; private boolean loadFromFile( File file ) { try { BufferedReader in = new BufferedReader( new FileReader(file) ); StringBuffer sb = new StringBuffer(""); String str = null; while ( (str = in.readLine()) != null ) { sb.append(str).append("\n"); } in.close(); ta.setText(sb.toString()); return true; } catch (Exception e) { // TODO: handle exception return false; } } public boolean saveToFile(File file) { // TODO 自动生成方法存根 try { PrintWriter out = new PrintWriter( file ); StringBuffer sb = new StringBuffer(this.getText()); out.print(sb.toString()); out.close(); return true; } catch (Exception e) { return false; } } } public MyTextArea ta = new MyTextArea(); public Chess() { this.setLayout(null); this.setTitle("MyFie"); this.setSize(500, 500); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { super.windowClosing(arg0); System.exit(0); } }); ta = new MyTextArea(); ta.setBounds(0, 0, 500, 500); this.add(ta); write = new JMenuItem("保存文件"); write.addActionListener(this); read = new JMenuItem("打开文件"); read.addActionListener(this); exit = new JMenuItem("退出"); exit.addActionListener(this); menu.add(write); menu.add(read); menu.add(exit); bar.add(menu); this.setJMenuBar(bar); }//gz public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("保存文件")) { JFileChooser jfc = new JFileChooser(); jfc.showOpenDialog(this); File f = jfc.getSelectedFile(); if(f!=null){ if(ta.saveToFile(f)){ JOptionPane.showMessageDialog(this,"保存成功!"); }else{ JOptionPane.showMessageDialog(this,"保存文件失败!"); } } return; } if (e.getActionCommand().equals("打开文件")) { JFileChooser jfc = new JFileChooser(); jfc.showOpenDialog(this); File f = jfc.getSelectedFile(); if(f!=null){ if(!ta.loadFromFile(f)){ JOptionPane.showMessageDialog(this,"文件格式不正确或已损坏!"); } } return; } if (e.getActionCommand().equals("退出")) { System.exit(0); } } public static void main(String ff[]) { (new Chess()).setVisible(true); } }
raid:raid是英文redundant array of inexpensive disks的缩写,中文简称为廉价磁盘冗余阵列。 dns:dns 是域名系统 (domain name system) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。 erp:是英文enterprise resourse planning的缩写,中文意思是企业资源规划。它是一个以管理会计为核心的信息系统,识别和规划企业资源,从而获取客户订单,完成加工和交付,最后得到客户付款。 com:不知道您说的具体是指哪种,在vc理com是种控件。 oltp:on-line transaction processing 联机事务处理 sql: 全名是结构化查询语言(structured query language) cobra:公用对象请求代理(调度)程序体系结构(common object request broker architecture) dll:dll是dynamic link library的缩写,意为动态链接库 xml:xml(extensible markup language)即可扩展标记语言,它与html一样,都是sgml(standard generalized markup language,标准通用标记语言) uml:( unified modeling language )是一种标准的图形化建模语言 jdbc:jdbc(java data base connectivity,java数据库连接)是一种用于执行sql语句的java apicmm:能力成熟度模型:capability maturity model msdn: microsoft software developer network的简称 ssl:ssl协议位于tcp/ip协议与各种应用层协议之间,为数据通讯提供安全支持 tcp/ip:tcp/ip(transmission control protocol/internet protocol)的简写,中文译名为传输控制协议/网际协议,又叫网络通讯协议 api:application programming interface,应用程序编程接口 http:http(hypertexttransferprotocol)是超文本传输协议的缩写,它用于传送www方式的数据 linux:linux操作系统,是一种计算机操作系统 ejb:ejb是sun的服务器端组件模型,最大的用处是部署分布式应用程序 motif:在计算机应用中,motif是指一个图形用户界面规格,也指随该规格,在unix与其他posix系统中运行于x window系统的部件工具箱
这个主要是你写得混乱造成的,你可以用JBuilder把界面先化好,再添加监听事件,把思路理清了,你注释掉的地方没看懂,主要是你写得混乱,至于JMenuItem item=n胆储册肥夭堵差瑟倡鸡ull; 有什么用,其他它只是起一个声明的作用。你删掉也可以。

java问题

4,TypeScript 和 JavaScript 的区别

“typescript和javascript的区别是:1、typescript中引入了javascript中没有的【类】概念;2、typescript中的数据要求带有明确的类型;3、typescript中引入了模块的概念。”
现在的Javascript遵循ECMA5的规范,TypeScript是语法上对ECMA6的实现。但现在的TypeScript需要编译(不是真正的编译,其实就是语法处理)后转换成Javascript才能执行。TypeScript不是 语法上的ECMA6实现,而是以JavaScript为目标语言的,一种编译语言,并且提供向原生JavaScript转换的编译器;
TypeScript 和 JavaScript 是目前项目开发中较为流行的两种脚本语言,我们已经熟知 TypeScript 是 JavaScript 的一个超集。JavaScript 和 TypeScript 的主要差异:1、TypeScript 可以使用 JavaScript 中的所有代码和编码概念,TypeScript 是为了使 JavaScript 的开发变得更加容易而创建的。例如,TypeScript 使用类型和接口等概念来描述正在使用的数据,这使开发人员能够快速检测错误并调试应用程序2、TypeScript 从核心语言方面和类概念的模塑方面对 JavaScript 对象模型进行扩展。3、JavaScript 代码可以在无需任何修改的情况下与 TypeScript 一同工作,同时可以使用编译器将 TypeScript 代码转换为 JavaScript。4、TypeScript 通过类型注解提供编译时的静态类型检查。5、TypeScript 中的数据要求带有明确的类型,JavaScript不要求。6、TypeScript 为函数提供了缺省参数值。7、TypeScript 引入了 JavaScript 中没有的“类”概念。8、TypeScript 中引入了模块的概念,可以把声明、数据、函数和类封装在模块中。
我怕讲不仔细 这是一个挺好的说明你可以看看作为编程语言的TypeScript 关于TypeScript,首先要认识的一点就是:它是Anders Hejlsberg的作品。Anders是第一流的编程语言设计师,也是第一流的编译器实现者。作为Object Pascal和C#之父,Anders这次仍然采用了此前的做法:他设计了一种新的语言,并实现了这种语言的编译器,来改进一种已有的语言。但这次又和此前有所不同,此前无论是Object Pascal还是C#,编译的目标代码都是机器码,而TypeScript的目标代码则是JavaScript。当然,如果把浏览器看作是虚拟机,而JavaScript看作是在这种虚拟机上运行的目标代码也无不可。总而言之,使用TypeScript这种语言撰写的源代码需要经过TypeScript编译器的编译,而产生的目标代码是标准的JavaScript。但这还不是TypeScript在语言设计层面上的特别之处,特别之处有两点。TypeScript支持on-the-fly编译,即写一句TypeScript就可以立即得到对应的JavaScript代码,这个特性和CoffeeScript类似。但它比CoffeeScript支持更强的上下文推导,不需要完整的语句写完,就可以生成对应的、不完整的JavaScript代码。TypeScript是JavaScript的超集(superset),“任何合法的JavaScript都是合法的TypeScript。”这种设计很明显是借鉴了C++对于C做扩充时采用的做法,它兼容已有的JavaScript代码的决定给很多JavaScript程序员向TypeScript转型时铺就坚实的第一步——他们可以从自己已有的代码出发,通过一点一点的改动来体会到TypeScript带来的好处,同时,时刻保留说“这样就够了”,然后停止的权利。直到掌握了比较全面的TypeScript技术以后,才从一开始就采用TypeScript来撰写代码,而只取用编译结果。实际上,“任何合法的JavaScript都是合法的TypeScript”这种说法并不准确,准确的说法是“任何合法的ECMAScript 6都是合法的TypeScript”。当然,ECMAScript 6还是一个正在修订的语言规范,而TypeScript在现阶段生成的任何目标代码,涉及可能会引起ECMAScript 6的新特性的,都采用了向下兼容的ECMAScript 5规范作为准则。但对于各个浏览器自行对JavaScript做的那部分扩充,TypeScript不保证予以支持。TypeScript特性简介前面已说过,TypeScript的设计目标是作为JavaScript或者说ECMAScript 6的超集。换句话说,如同C++的初始目标是作为“更好的C”一样,TypeScript也可以看作是“更好的JavaScript”,那么好在哪里呢?其实用C++和C的关系来做类比,还是很恰当的。TypeScript充分利用了JavaScript原有的对象模型并在此基础上做了扩充,添加了较为严格的类型检查机制,添加了模块支持和API导出的能力。比起JavaScript,TypeScript提供了更多在语言层面上的支持,使得程序员能够以更加标准化的语法来表达语义上的约束,从而降低了程序出错的机率;TypeScript也使得代码组织和复用变得更加有序,使得开发大型Web应用有了一套标准方法。对象模型的扩展JavaScript支持极为广泛的对象模型,除了null和undefined以外,几乎所有的其他实体都可以视为对象,即使是数值、字符串和布尔型亦可以隐式使用其对应的包装器而直接作为对象用于一般场合。函数和数组这样在其他的编程语言中不被视为对象的实体,在JavaScript亦视为“一等对象”(first-class object),除了利用实体本身的场合,例如使用数值索引或调用函数体以外,还可以作为普通的对象拿来添加属性和方法。JavaScript对象支持在任意时刻动态添加属性和方法,并且支持修改和扩充内建对象。一句话,JavaScript提供了大量进行对象操作的基础设施(facilities)和基本工具(utilities),正是这些内容构成了JavaScript丰富而灵活的对象模型。TypeScript主要从两个方面对JavaScript对象模型进行扩展:一是在核心语言方面,二是在类概念的模塑方面。声明语义学在TypeScript中书写涉及DOM对象的JavaScript代码,一般来说不会遇到问题。但这并不是因为TypeScript语言中对DOM对象有所“了解”,而是因为TypeScript默认会加载名为lib.d.ts的声明文件,其中默认已包含了所有的DOM对象的声明。换言之,当你写下这个语句:之时,编译器实际上已隐式地在最前面加上了一句:这种声明称为环境声明(ambient declaration),遇到环境声明以后,TypeScript便会试图从声明的来源(如声明库中)分析和推导对象的类型信息。如果找不到任何的来源,它便默认该对象的类型为any。但无论如何,环境声明都不会向生成的JavaScript里加任何语句。事实上,所有的TypeScript声明都不会生成对应的JavaScript语句,因为JavaScript对象模型中的声明是可选的。这里也可以看出TypeScript遵循“除非必要,不生成多余的语句”的哲学。但声明在TypeScript中除了有着预先提供类型信息的重要作用之外,编译器还能根据这些信息完成强大的类型推导,以及精准的静态类型检查。数据语义学TypeScript中的数据要求带有明确的类型,如果设定为一种类型,却要将该类型内不合法的值赋给它,则静态类型检查机制会将这样的语句标示为错误。可以采用interface关键字定义具名结构类型,这个特性类似于在JavaScript中采用字面量来定义JavaScript对象。所不同的是,在TypeScript中每个组分都必须指定类型,不过组分可以是可选的,在实际提供字面量对象时,可选组分可以不提供。同样地,interface的数据类型定义,以及在TypeScript中为数据指定的任何静态类型声明,都不会在生成任何的JavaScript目标代码有任何体现。例如上面这段代码生成的JavaScript目标代码仅仅是:函数对象的类型主要由它的签名式(signature)决定,包括各个形式参数的名字、类型和返回值类型。值得注意的是,函数对象的返回值可以是void,这是void类型唯一可以出现的地方,而它的唯一可能取值是undefined。函数语义学TypeScript中的函数除了在JavaScript的函数对象模型的基础上添加了静态类型检查,体现了函数的数据方面之外,还在函数本身的性质上增加了不少新特性,例如函数缺省参数值:它会对应地生成以下的JavaScript目标代码,从这里可以清晰地看到它生成代码的逻辑是通过判断参数有无定义来进行的:TypeScript支持有限的函数重载,为何说是有限的呢?因为一般意义上的函数重载是根据函数签名式的不同,在函数被实际调用时根据实际参数的类型来绑定到特定的重载函数的。其背后的实现机制,大多数是所谓的名称重整(name mangling)。但TypeScript中的函数重载不能这样做,它只支持能够以共用实现体为基础的重载,无论声明了多少个同名且签名式不同的函数,它都只能有一个实现体,且这个实现体必须对所有的重载版本都有意义。这样说可能比较令人费解,看个例子好了:只要看一下上述TypeScript代码生成的JavaScript目标代码,就明白了大半:原因就在于TypeScript在实现重载时并没有使用名称重整机制,而JavaScript又不支持重载,所以只能做出这样非常大的折中方案了。TypeScript中最引人注目的一个函数对象特性是支持所谓的“箭头记法”(arrow notation),即Lamda表达式。例如下面的三个函数是等价的:但箭头记法最重要的用途还是在需要使用回调函数的场合。此时最易犯的一个错误就是this的作用域并非保留在被调用函数所在的局部作用域,而成了函数调用方所在的作用域。还是通过一个例子来看:此时,点击页面,弹出的警告框显示的值是“NAN”,显然有问题。而问题就出在这里的this指的是函数调用方作用域,此处成了全局作用域,结果自然不对。此时只要改用箭头记法,问题就迎刃而解:这个记法是ECMAScript 6引入的,查看一下TypeScript生成的目标代码,就可以了解它是采用了迂回的办法在实现达到效果的同时又保持向下的兼容性。class和继承语义学TypeScript对JavaScript对象模型最重要的扩充,自然在于它补充了JavaScript中所没有引入的“类”的概念。是的,在JavaScript中没有类,只有对象,要实现所谓的“类式操作”(classical operations),如封装、多态等,要通过若干基础设施,如原型、构造函数等来完成。这些对于非常熟悉JavaScript的程序员来说,也许都是可以完成的任务,但对于新手来说就困难重重了。并且,即使是高手,一段时间不写相关的代码也很容易遗忘和出错。但TypeScript却提供了标准的机制,将普通程序员熟悉的、C++和C#中常用的类概念映射到JavaScript中去,这样就大大降低了在JavaScript进行类式操作的难度。由于相关的概念理解起来并不困难,但技术内容却非常多,所以这里只介绍几点较关键的。首先,用一句话来概括在TypeScript中class的核心语义:所有的class都是一个立即函数,所有的数据成员都是这个函数实例的属性,所有的方法都是这个函数原型的属性,所有的静态成员都是这个函数的构造函数的属性。各就各位,不会出错。只要看一下class生成的JavaScript目标代码就很明了,假设有个根据工龄计算工资的Human类定义如下:它生成的JavaScript目标代码如下:值得说明的是,TypeScript支持所谓的“存取器”。采用存取器,可以将函数封装,并且以数据属性的形式暴露出来。例如可以为上述类增加一个获取工资数额的存取器:对应的JavaScript代码比较复杂,浏览器需要支持ECMAScript 5才能运行:代码组织和重构TypeScript中引入了模块的概念,这类似于C++中的名字空间。它可以把声明、数据、函数和类封装在模块中,并采用export关键字导出,供模块外部的代码取用。之所以说它和命名空间比较相似,一是因为同名的模块可以自动合并,甚至可以分别存储在多个文件中;二是因为模块的名字可以分成不同层次,在层次较多时还可以命名简化的别名。但无论模块怎么组织,最终生成的还是标准的、可直接取用的JavaScript代码。正是靠着模块化、可插拔的结构,TypeScript才得以在维护一个较小的语言核心的前提下,对广泛使用的库如jQuery、CommonJS和Node.js等提供了完整的支持。由于TypeScript并不是采用字符串匹配的粗糙方式来推导变量和函数的名字,对TypeScript代码进行命名的重构就如同微软的其他编程语言一样容易。只需要选中要重新命名的实体,并键入新的名字,而不需要担心名字相同而意义不同的其他实体也被同时重命名了。小结TypeScript是现今所有对JavaScript的改进中,唯一完全兼容并作为它的超集存在的解决方案。并且,TypeScript几乎是改进了JavaScript对象模型的方方面面,本文介绍的只是其中比较重要的一部分技术,还有很多细节还需要读者自己去探索。现在,TypeScript的最新版本是0.8.1,并且开放了全部的源代码。很有意思的是,TypeScript本身就是用TypeScript实现的,这种递归式的结构也是编译器大牛们很钟爱的方式之一,因为当年Bjarne Stroustrup也用C++本身来写C++编译器。熟悉TypeScript源码和规范不仅让我们可以更快地掌握这门新语言,也能够更深入地了解如何利用它来解决一些更复杂的问题,例如如何扩充它来支持一些特定的浏览器才提供的JavaScript特性等。总而言之,TypeScript可以说是最有前途的JavaScript扩展甚至替代的解决方案之一,有志于前端技术的朋友们应该尽快地熟悉起来。

5,oracle数据库中有哪些字符集字符集之间的子集和超集关系是怎么样

oracle数据库的字符集有很多的,具体的也不能一一详细地列举出来了,但是,建库的时候,会有选择字符集的界面,点开下拉条,将会列出oracle所支持的所有字符集(10/12)。超集与子集是包含和被包含的关系,超集兼容子集。
理解ORACLE数据库字符集一.引言 ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,其中oracle8i支持48种语言、76个国家地域、229种字符集,而oracle9i则支持57种语言、88个国家地域、235种字符集。由于oracle字符集种类多,且在存储、检索、迁移oracle数据时多个环节与字符集的设置密切相关,因此在实际的应用中,数据库开发和管理人员经常会遇到有关oracle字符集方面的问题。本文通过以下几个方面阐述,对oracle字符集做简要分析二.字符集基本知识2.1字符集 实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。Oracle数据库最早支持的编码方案是US7ASCII。 Oracle 的字符集命名遵循以下命名规则 : 即: <语言><比特位数><编码 > 比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集2.2字符编码方案2.2.1 单字节编码 (1)单字节7位字符集,可以定义128个字符,最常用的字符集为 US7ASCII (2)单字节8位字符集,可以定义256个字符,适合于欧洲大部分国家 例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码 )2.2.2 多字节编码 (1)变长多字节编码 某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持, 例如日语、汉语、印地语等 例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)、 zhs16cgb231280 (2)定长多字节编码 每一个字符都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节编码是AF16UTF16,也是仅用于国家字符集2.2.3 unicode 编码 Unicode 是一个涵盖了目前全世界使用的所有已知字符的单一编码方案,也就是说Unicode为每一个字符提供唯一的编码。UTF-16是unicode的16位编码方式,是一种定长多字节编码,用2个字节表示一个unicode字符,AF16UTF16是UTF-16编码字符集。 UTF-8 是unicode的8位编码方式,是一种变长多字节编码,这种编码可以用1、2、3个字节表示一个unicode字符,AL32UTF8,UTF8、UTFE是UTF-8编码字符集2.3 字符集超级 当一种字符集(字符集A)的编码数值包含所有另一种字符集(字符集B)的编码数值,并且两种字符集相同编码数值代表相同的字符时,则字符集A是字符集B的超级,或称字符集B是字符集A的子集。 Oracle8i 和oracle9i官方文档资料中备有子集-超级对照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由于US7ASCII是最早的Oracle数据库编码格式,因此有许多字符集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。2.4 数据库字符集(oracle服务器端字符集) 数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。2.4.1 字符集 (1) 用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据 (2) 用来标示诸如表名、列名以及PL/SQL变量等 (3) 用来存储SQL和PL/SQL程序单元等2.4.2 国家字符集: (1) 用以存储NCHAR, NVARCHAR2, NCLOB等类型数据 (2) 国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码的支持,而数据库字符集则不能。国家字符集在oracle9i中进行了重新定义,只能在unicode编码中的AF16UTF16和UTF8中选择,默认值是 AF16UTF162.4.3查询字符集参数 可以查询以下数据字典或视图查看字符集设置情况 nls_database_parameters 、props$、 v$nls_parameters 查询结果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符集2.4.4 修改数据库字符集 按照上文所说,数据库字符集在创建后原则上不能更改。如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。2.5 客户端字符集(NLS_LANG参数)2.5.1 客户端字符集含义 客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。2.5.2 NLS_LANG 参数格式 NLS_LANG=_. Language: 显示oracle消息,校验,日期命名 Territory :指定默认日期、数字、货币等格式 Client character set :指定客户端将使用的字符集 例如: NLS_LANG=AMERICAN_AMERICA.US7ASCII AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集2.5.3 客户端字符集设置方法 1)UNIX 环境 $NLS_LANG=“simplified chinese”_china.zhs16gbk $export NLS_LANG 编辑oracle用户的profile文件 2)Windows 环境 编辑注册表 Regedit.exe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME02.5.4 NLS 参数查询 Oracle 提供若干NLS参数定制数据库和用户机以适应本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通过查询以下数据字典或v$视图查看。 NLS_DATABASE_PARAMETERS-- 显示数据库当前NLS参数取值,包括数据库字符集取值 NLS_SESSION_PARAMETERS-- 显示由NLS_LANG 设置的参数,或经过alter session 改变后的参数值(不包括由NLS_LANG 设置的客户端字符集) NLS_INSTANCE_PARAMETE-- 显示由参数文件init.ora 定义的参数V$NLS_PARAMETERS--显示数据库当前NLS参数取值2.5.5 修改NLS参数 使用下列方法可以修改NLS参数 (1)修改实例启动时使用的初始化参数文件 (2)修改环境变量 NLS_LANG (3)使用ALTER SESSION语句,在oracle会话中修改 (4)使用某些SQL函数 NLS 作用优先级别:Sql function>alter session>环境变量或注册表>参数文件>数据库默认参数三.导入/导出与字符集转换3.1 EXP/IMP Export 和 Import 是一对读写Oracle数据的工具。Export 将 Oracle 数据库中的数据输出到操作系统文件中, Import 把这些文件中的数据读到Oracle 数据库中,由于使用exp/imp进行数据迁移时,数据从源数据库到目标数据库的过程中有四个环节涉及到字符集,如果这四个环节的字符集不一致,将会发生字符集转换。EXP ____________ _________________ _____________ |imp导入文件|<-><-> ------------ ----------------- -------------IMP ____________ _________________ _____________ |imp导入文件|->|环境变量NLS_LANG|->|数据库字符集| ------------ ----------------- ------------- 四个字符集是 (1)源数据库字符集 (2)Export过程中用户会话字符集(通过NLS_LANG设定) (3)Import过程中用户会话字符集(通过NLS_LANG设定) (4)目标数据库字符集3.2导出的转换过程 在Export过程中,如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,并在导出文件的头部几个字节中存储Export用户会话字符集的ID号。在这个转换过程中可能发生数据的丢失。例:如果源数据库使用ZHS16GBK,而Export用户会话字符集使用US7ASCII,由于ZHS16GBK是16位字符集,而US7ASCII是7位字符集,这个转换过程中,中文字符在US7ASCII中不能够找到对等的字符,所以所有中文字符都会丢失而变成“?? ”形式,这样转换后生成的Dmp文件已经发生了数据丢失。因此如果想正确导出源数据库数据,则Export过程中用户会话字符集应等于源数据库字符集或是源数据库字符集的超集3.3导入的转换过程 (1)确定导出数据库字符集环境 通过读取导出文件头,可以获得导出文件的字符集设置 (2)确定导入session的字符集,即导入Session使用的NLS_LANG环境变量 (3)IMP读取导出文件 读取导出文件字符集ID,和导入进程的NLS_LANG进行比较 (4)如果导出文件字符集和导入Session字符集相同,那么在这一步骤内就不需要转换,如果不同,就需要把数据转换为导入Session使用的字符集。可以看出,导入数据到数据库过程中发生两次字符集转换 第一次:导入文件字符集与导入Session使用的字符集之间的转换,如果这个转换过程不能正确完成,Import向目标数据库的导入过程也就不能完成。 第二次:导入Session字符集与数据库字符集之间的转换。 然而,oracle8i的这种转换只能在单字节字符集之间进行,oracle8i导入Session不支持多字节字符集之间的转换,因此为了避免第一次转换,导入Session使用的NLS_LANG与导出文件字符集相同,第二次转换(通过SQL*Net)支持任何两种字符集。以上情况在Oracle9i中略有不同四.乱码问题 oracle在数据存储、迁移过程中经常发生字符乱码问题,归根到底是由于字符集使用不当引起。下面以使用客户端sqlplus向数据库插入数据和导入/导出(EXP/IMP)过程为例,说明乱码产生的原因。4.1使用客户端sqlplus向数据库存储数据 这个过程存在3个字符集设置 (1)客户端应用字符集 (2)客户端NLS_LANG参数设置 (3)服务器端数据库字符集(Character Set)设置 客户端应用sqlplus中能够显示什么样的字符取决于客户端操作系统语言环境(客户端应用字符集),但在应用中录入这些字符后,这些字符能否在数据库中正常存储,还与另外两个字符集设置紧密相关,其中客户端NLS_LANG参数主要用于字符数据传输过程中的转换判断。常见的乱码大致有两种情形: (1)汉字变成问号“?”;当从字符集A 转换成字符集B时,如果转换字符之间不存在对应关系,NLS_LANG使用替代字符“?”替代无法映射的字符 (2)汉字变成未知字符(虽然有些是汉字,但与原字符含义不同)转换存在对应关系,但字符集A 中的字符编码与字符集B 中的字符编码代表不同含义4.2发生乱码原因 乱码产生是由于几个字符集之间转换不匹配造成,分以下几种情况: (注:字符集之间如果不存在子集、超集对应关系时的情况不予考虑,因为这种情况下字符集之间转换必产生乱码) 1)服务器端数据库字符集与客户端应用字符集相同,与客户端NLS_LANG参数设置不同 如果客户端NLS_LANG字符集是其它两种字符集的子集,转换过程将出现乱码。 解决方法:将三种字符集设置成同一字符集,或NLS_LANG字符集是其它两种字符集的超集 2 )服务器端数据库字符集与客户端NLS_LANG参数设置相同,与客户端应用字符集不同 如果客户端应用字符集是其它两种字符集的超集时,转换过程将出现乱码,但对于单字节编码存储中文问题,可参看本文第5章节的分析 3 )客户端应用字符集、客户端NLS_LANG参数设置、服务器端数据库字符集互不相同 此种情况较为复杂,但三种字符集之间只要有不能转换的字符,则必产生乱码4.3导入/导出过程出现乱码原因 这个过程存在4个字符集设置,在3.1章节中已分析 (1)源数据库字符集 (2)EXP过程中NLS_LANG参数 (3)IMP过程中NLS_LANG参数 (4)目标数据库字符集 出现乱码原因 1 )当源数据库字符集不等于EXP过程中NLS_LANG参数,且源数据库字符集是EXP过程中NLS_LANG的子集,才能保证导出文件正确,其他情况则导出文件字符乱码 2 )EXP过程中NLS_LANG字符集不等于IMP过程中NLS_LANG字符集,且EXP过程中NLS_LANG字符集是IMP过程中NLS_LANG字符集的子级, 才能保证第一次转换正常,否则第一次转换中出现乱码。 3 )如果第一次转换正常,IMP过程中NLS_LANG字符集是目标数据库字符集的子集或相同,才能保证第二次转换正常,否则则第二次转换中出现乱码五.单字节编码存储中文问题 由于历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle7.1),但有的用户从那时起就使用数据库了,并用US7ASCII字符集存储了中文,或是有的用户在创建数据库时,不考虑清楚,随意选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,虽然有些时候选用这种字符集好象也能正常使用,但用这种字符集存储汉字信息从原则上说就是错误的,它会给数据库的使用与维护带来一系列的麻烦。 正常情况下,要将汉字存入数据库,数据库字符集必须支持中文,而将数据库字符集设置为US7ASCII等单字节字符集是不合适的。US7ASCII字符集只定义了128个符号,并不支持汉字。另外,如果在SQL*PLUS中能够输入中文,操作系统缺省应该是支持中文的,但如果在NLS_LANG中的字符集设置为US7ASCII,显然也是不正确的,它没有反映客户端的实际情况。但在实际应用中汉字显示却是正确的,这主要是因为Oracle检查数据库与客户端的字符集设置是同样的,那么数据在客户与数据库之间的存取过程中将不发生任何转换,但是这实际上导致了数据库标识的字符集与实际存入的内容是不相符的。而在SELECT的过程中,Oracle同样检查发现数据库与客户端的字符集设置是相同的,所以它也将存入的内容原封不动地传送到客户端,而客户端操作系统识别出这是汉字编码所以能够正确显示。 在这个例子中,数据库与客户端都没有设置成中文字符集,但却能正常显示中文,从应用的角度看好象没问题。然而这里面却存在着极大的隐患,比如在应用length或substr等字符串函数时,就可能得到意外的结果。 对于早期使用US7ASCII字符集数据库的数据迁移到oracle8i/9i中(使用zhs16gbk),由于原始数据已经按照US7ASCII格式存储,对于这种情况,可以通过使用Oracle8i的导出工具,设置导出字符集为US7ASCII,导出后使用UltraEdit等工具打开dmp文件,修改第二、三字符,修改 0001 为0354,这样就可以将US7ASCII字符集的数据正确导入到ZHS16GBK的数据库中。六.结束语 为了避免在数据库迁移过程中由于字符集不同导致的数据损失,oracle提供了字符集扫描工具(character set scanner),通过这个工具我们可以测试在数据迁移过程中由于字符集转换可能带来的问题,然后根据测试结果,确定数据迁移过程中最佳字符集解决方案。参考文献[1]Biju Thomas , Bob Bryla 《oracle9i DBA基础I 学习指南》电子工业出版社 2002
文章TAG:支持哪些数据数据库superset支持哪些数据库

最近更新

  • 哪些用户可以创建数据库,mysql 只能用root用户创建数据库吗普通用户不能吗哪些用户可以创建数据库,mysql 只能用root用户创建数据库吗普通用户不能吗

    mysql只能用root用户创建数据库吗普通用户不能吗root用户是系统默认的超级管理员,权限是最高的,当然可以管理任何用户建立的数据库了。你新建的ppamdin可以取得管理权限,但不是最高的权限.....

    知识 日期:2025-06-21

  • 不支持安装应用程序怎么解决,macos不支持windows应用程序怎么办不支持安装应用程序怎么解决,macos不支持windows应用程序怎么办

    应用不兼容程序如何解决?计算机应用程序安装运行不了怎么办?不同的程序不能正常运行,不同的程序有不同的处理方法。2.为什么下载的应用程序程序无法安装在手机上?如果安装失败,请进行如下检.....

    知识 日期:2025-06-21

  • 如何添加程序到服务,如何在开始里面添加程序如何添加程序到服务,如何在开始里面添加程序

    如何将a程序添加批量到系统服务?如何将应用程序程序注册为系统服务windows系统?如果你想启动一个应用程序,可以采取以下措施:1。放在启动里面;2.计划任务;3、添加for服务以此类推,如何安装Wi.....

    知识 日期:2025-06-21

  • 判断三角形形状程序流程图,判断abc能否构成三角形流程图判断三角形形状程序流程图,判断abc能否构成三角形流程图

    c语言程序设计判断三角形Type程序有个小细节我不懂。这个变量标志用来表示它是否是通用的三角形,流程图是流经系统的信息流、视点流或组件流的图形表示,如何制作流程图?在企业中,流程图主.....

    知识 日期:2025-06-21

  • 九宫格 c程序九宫格 c程序

    81lattice九宫lattice,one九宫lattice,请用C语言编一个解九宫latticeSudoku程序我前两天刚写的,还有一个是3x3。//一个空数据的矩阵,9个九宫单元格,从左到右,然后从上到下编号为08;//比如第一.....

    知识 日期:2025-06-21

  • sublime 注释插件,Sublime注释快捷键sublime 注释插件,Sublime注释快捷键

    sublime效果更好。sublimetext3使用教程1,双击桌面上的sublimetext3快捷方式将其打开,本文将讲解如何在Ubuntu14.04系统中安装SublimeText3,以及如何配置SublimeClang插件来配置C/C开发环.....

    知识 日期:2025-06-21

  • 微信小程序所有项目微信小程序所有项目

    微信肖程序挂机项目是真的吗微信肖程序挂机项目不是真的。微信Xiao程序如何打造自己的Xiao程序/Xiao程序是热门应用程序,微信肖程序开发教程?3.创建小程序项目:在/developer工具中创建小.....

    知识 日期:2025-06-21

  • 好用的苹果手机插件,苹果手机flash插件怎样安装好用的苹果手机插件,苹果手机flash插件怎样安装

    苹果手机有没有增强信号的软件或者插件?苹果手机flash插件姚苹果手机不支持flash插件的安装。苹果什么助手好用?如果要用苹果-3/总召回,必须借用其他软件完成,你可以在苹果AppStore商城下.....

    知识 日期:2025-06-21