Oracle库采用的是ascii编码,也就是英文字符集库。java通过jdbc查询出来如何转码? oracle 中select into是什么意思

oracle\u4e2d||\u662f\u4ec0\u4e48

\u8fde\u63a5\u4f5c\u7528\u3002 \u4e5f\u5c31\u662f\u53ef\u4ee5\u628a\u4e24\u4e2a\u5b57\u6bb5\u767e\u7684\u6570\u636e\u6216\u8005\u67d0\u4e9b\u5b57\u7b26\u7ec4\u6210\u6211\u4eec\u60f3\u8981\u7684\u8868\u8fbe\u5f62\u5f0f
ORACLE\u6570\u636e\u5e93\u7cfb\u7edf\u662f\u7f8e\u56fdORACLE\u516c\u53f8\uff08\u7532\u9aa8\u6587\uff09\u63d0\u4f9b\u7684\u4ee5\u5206\u5e03\u5f0f\u6570\u636e\u5e93\u4e3a\u6838\u5fc3\u7684\u4e00\u7ec4\u8f6f\u4ef6\u4ea7\u54c1\uff0c\u662f\u76ee\u524d\u6700\u6d41\u884c\u7684\u5ba2\u6237/\u670d\u52a1\u5668(CLIENT/SERVER)\u6216B/S\u4f53\u7cfb\u7ed3\u6784\u7684\u6570\u636e\u5e93\u4e4b\u4e00\u3002\u6bd4\u5982SilverStream\u5c31\u662f\u57fa\u4e8e\u6570\u636e\u5e93\u7684\u4e00\u79cd\u4e2d\u95f4\u4ef6\u3002
ORACLE\u6570\u636e\u5e93\u662f\u76ee\u524d\u4e16\u754c\u4e0a\u4f7f\u7528\u6700\u4e3a\u5e7f\u6cdb\u7684\u6570\u636e\u5e93\u7ba1\u7406\u7cfb\u7edf\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u901a\u7528\u7684\u6570\u636e\u5e93\u7cfb\u7edf\uff0c\u5b83\u5177\u6709\u5b8c\u6574\u7684\u6570\u636e\u7ba1\u7406\u529f\u80fd\uff1b\u4f5c\u4e3a\u4e00\u4e2a\u5173\u7cfb\u6570\u636e\u5e93\uff0c\u5b83\u662f\u4e00\u4e2a\u5b8c\u5907\u5173\u7cfb\u7684\u4ea7\u54c1\uff1b\u4f5c\u4e3a\u5206\u5e03\u5f0f\u6570\u636e\u5e93\u5b83\u5b9e\u73b0\u4e86\u5206\u5e03\u5f0f\u5904\u7406\u529f\u80fd\u3002\u4f46\u5b83\u7684\u6240\u6709\u77e5\u8bc6\uff0c\u53ea\u8981\u5728\u4e00\u79cd\u673a\u578b\u4e0a\u5b66\u4e60\u4e86ORACLE\u77e5\u8bc6\uff0c\u4fbf\u80fd\u5728\u5404\u79cd\u7c7b\u578b\u7684\u673a\u5668\u4e0a\u4f7f\u7528\u5b83\u3002

\u6269\u5c55\u8d44\u6599\uff1a
Oracle\u6570\u636e\u5e93\u6700\u65b0\u7248\u672c\u4e3aOracle Database 19c\u3002Oracle\u6570\u636e\u5e9312c \u5f15\u5165\u4e86\u4e00\u4e2a\u65b0\u7684\u591a\u627f\u79df\u65b9\u67b6\u6784\uff0c\u4f7f\u7528\u8be5\u67b6\u6784\u53ef\u8f7b\u677e\u90e8\u7f72\u548c\u7ba1\u7406\u6570\u636e\u5e93\u4e91\u3002
\u6b64\u5916\uff0c\u4e00\u4e9b\u521b\u65b0\u7279\u6027\u53ef\u6700\u5927\u9650\u5ea6\u5730\u63d0\u9ad8\u8d44\u6e90\u4f7f\u7528\u7387\u548c\u7075\u6d3b\u6027\uff0c\u5982Oracle Multitenant\u53ef\u5feb\u901f\u6574\u5408\u591a\u4e2a\u6570\u636e\u5e93\uff0c\u800cAutomatic Data Optimization\u548cHeat Map\u80fd\u4ee5\u66f4\u9ad8\u7684\u5bc6\u5ea6\u538b\u7f29\u6570\u636e\u548c\u5bf9\u6570\u636e\u5206\u5c42\u3002\u8fd9\u4e9b\u72ec\u4e00\u65e0\u4e8c\u7684\u6280\u672f\u8fdb\u6b65\u518d\u52a0\u4e0a\u5728\u53ef\u7528\u6027\u3001\u5b89\u5168\u6027\u548c\u5927\u6570\u636e\u652f\u6301\u65b9\u9762\u7684\u4e3b\u8981\u589e\u5f3a\uff0c\u4f7f\u5f97Oracle\u6570\u636e\u5e9312c \u6210\u4e3a\u79c1\u6709\u4e91\u548c\u516c\u6709\u4e91\u90e8\u7f72\u7684\u7406\u60f3\u5e73\u53f0\u3002

\u8fd9\u662f\u4e00\u4e2a\u590d\u5236\u8868\u6570\u636e\u7684\u64cd\u4f5c\u3002
\u521b\u5efaaaa\u8868\uff0c\u8fd9\u91cc\u6ca1\u6709\u5b9a\u4e49aaa\u8868\u7684\u5b57\u6bb5\u4ee5\u53ca\u7c7b\u578b\uff0c\u800c\u662f\u7528select * from bbb\uff0c\u8fd9\u5c31\u662f\u628abbb\u91cc\u9762\u6240\u6709\u7684\u5b57\u6bb5\u5305\u542b\u7c7b\u578b\u4ee5\u53ca\u6570\u636e\u90fd\u590d\u5236\u5230aaa\u4e2d\u53bb\u3002\u90a3\u4e48\u5c31\u521b\u5efa\u4e86\u4e00\u5f20\u548cbbb\u8868\u4e00\u6837\u7684aaa\u8868\u3002\u5305\u62ec\u6570\u636e\u7b49\u90fd\u4e00\u6837\u3002\u53ea\u662f\u4e0d\u5305\u542bbbb\u8868\u4e2d\u7684\u4e3b\u952e\u4ee5\u53ca\u7ea6\u675f\u7b49\u3002
\u8fd9\u4e2a\u5730\u65b9\u662f\u4e0d\u80fd\u4f7f\u7528select into\u6765\u5b8c\u6210\u7684\u3002select into \u662fSQLSERVER\u7684\u8bed\u6cd5\uff1a\u540c\u6837\u7684\u6548\u679cselect * into aaa from bbb\u3002



\u6269\u5c55\u8d44\u6599\uff1a

\u4ece\u53c2\u4e0e\u590d\u5236\u7684\u8282\u70b9\u95f4\u7684\u5173\u7cfb\u5206\u7c7b
1\u3001\u4e3b\u4ece\u590d\u5236
\u590d\u5236\u4e2d\u53ea\u5141\u8bb8\u4ece\u6e90\u6570\u636e\u5e93(\u5373\u4e3b\u6570\u636e\u5e93)\u5411\u5176\u4ed6\u6570\u636e\u5e93(\u4ece\u6570\u636e\u5e93)\u590d\u5236\u5bf9\u8c61\uff0c\u590d\u5236\u5bf9\u8c61\u5b58\u653e\u5728\u4ece\u6570\u636e\u5e93\u7ad9\u70b9\u4e2d\u3002\u4e3b\u4ece\u590d\u5236\u662f\u6700\u57fa\u672c\u7684\u4e00\u79cd\u7ed3\u6784\u3002
\u5728\u8fd9\u79cd\u7ed3\u6784\u4e2d\uff0c\u5b9a\u4e49\u4e00\u4e2a\u4e3b\u8282\u70b9\uff0c\u5176\u6e90\u6570\u636e\u79f0\u4e3a\u4e3b\u8282\u70b9\u6570\u636e(\u6216\u4e3b\u62f7\u8d1d) ;\u5b9a\u4e491\u5230n\u4e2a\u590d\u5236\u8282\u70b9\uff0c\u5176\u4ece\u4e3b\u8282\u70b9\u590d\u5236\u8fc7\u6765\u7684\u6570\u636e\u79f0\u4e3a\u590d\u5236\u70b9\u6570\u636e(\u6216\u526f\u62f7\u8d1d) \u3002\u6570\u636e\u66f4\u65b0\u64cd\u4f5c\u53ea\u80fd\u5728\u4e3b\u62f7\u8d1d\u4e0a\u8fdb\u884c\uff0c\u7136\u540e\u590d\u5236\u7ed9\u5176\u5b83\u526f\u62f7\u8d1d\u3002
2\u3001\u5bf9\u7b49\u590d\u5236
\u6240\u6709\u526f\u672c\u5728\u4efb\u4f55\u8282\u70b9\u90fd\u53ef\u4ee5\u88ab\u4fee\u6539\uff0c\u5e76\u4e14\u4fee\u6539\u53ef\u4ee5\u53d1\u9001\u7ed9\u5176\u4ed6\u526f\u672c\uff0c\u5373\u6240\u6709\u7ad9\u70b9\u7684\u5730\u4f4d\u3001\u4f5c\u7528\u662f\u7b49\u540c\u7684\uff0c\u6ca1\u6709\u4e3b\u4ece\u5173\u7cfb\u3002
3\u3001\u7ea7\u8054\u5f0f\u590d\u5236
\u662f\u4e3b\u4ece\u7ed3\u6784\u7684\u4e00\u4e2a\u6269\u5c55\uff0c\u5b83\u4e5f\u662f\u7531\u4e00\u4e2a\u4e3b\u62f7\u8d1d\u548c\u82e5\u5e72\u4e2a\u526f\u62f7\u8d1d\u7ec4\u6210\u3002\u4e0d\u540c\u4e8e\u4e3b\u4ece\u7ed3\u6784\u7684\u662f\u5b83\u5141\u8bb8\u6bcf\u4e2a\u4ece\u5c5e\u526f\u62f7\u8d1d(\u4ece\u5c5e\u7ad9\u70b9)\u5177\u6709\u590d\u5236\u7684\u80fd\u529b\uff0c\u5373\u4e00\u4e2a\u4ece\u5c5e\u526f\u62f7\u8d1d\u53ef\u4ee5\u628a\u63a5\u6536\u5230\u7684\u590d\u5236\u6570\u636e\u518d\u4f20\u7ed9\u4e0b\u4e00\u4e2a\u4ece\u5c5e\u526f\u62f7\u8d1d\u3002\u4f8b\u5982\uff0c\u5728Oracle\u4e2d\u4e00\u4e2a\u5feb\u7167\u7ad9\u70b9\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u4e3b\u7ad9\u70b9\u3002
\u53c2\u8003\u8d44\u6599\uff1a\u767e\u5ea6\u767e\u79d1-\u590d\u5236\u6570\u636e\u5e93

ASCII 码不支持多字节的字符嘛,保存的过程可能已经失真了而无法还原。


Oracle 文档上是说它会自动转换字符,但:

有额外时间开销,可能有些数据丢失。


数据丢失的情况出现在:当原来的 GBK 中文 Windows 中的字符(一个汉字)在 US7ASCII 字符集中不存在时会被替换成一个点位符(一般是问号或与目标语言相关的字符),也就是我们说的乱码。


从这句话看,Oracle 在保存我们的数据时就已经错了,再去读取时是无法还原的。


因此为了让我们的数据正常地保存和还原,需要自己来编码数据。


直接用 "汉".getBytes("ASCII") 只拿到了一个字节,很明显,这是错误的结果 63 是指问号?这个测试是说如果我们给一个”汉“字,Oracle 当成 ASCII 去解码的话它把一个问号保存在数据库中。


使用 ASCII 7bit 当中间缓存字符集,我们无法保存汉字编码的 8bit 数据,最终显示成问号,这步已经失真了。这里面我们要想到我们的 GB2312 或 UTF8 这样的字符集本身都是假设一个字节的最高位 (8bit 中的第1个 bit)是有特殊意义的,当我们用 US7ASCII 是它忽略掉这个位只处理后面7-bit 的。




再试下用  ISO-8859-1 8-bit 做中间缓存字符集,我们看到它能保证数据依然是8bit 未失真,我们能准确地还原出来。


从上面的测试看出来,如果数据库是 ISO-8859-1 这种 8 bit 字符集的话,它是能通过代码:

stmt.setString(1, new String(name.getBytes(), "ISO-8859-1"));

来保存,最后在读取的时候:

String name=new String(rs.getString(1).getBytes("ISO-8859-1"));

来还原的。但是很不幸的是 US7ASCII 字符集是没办法无损地保存汉字的,因此我们需要自己来编码那些像名字地址这样的有中文的数据,这里假设我们是用 GB2312 这种双字节的 16-bit,换成 US7-ASCII(每字节只有7-bit 有意义),需要3个字节,如果是 GBK 的话,你需要把它改一改,如果你想让程序保存所有出现在 Unicode 中的字符的话,那就用5字节 (int 32位的,32 = 7bit * 5 把一个 int 表示的 Unicode code point 整数保存下来就好了,保证它能处理全地球上所有已经编码成 unicode 的字符:

 String name = "汉";
String us7ascii = null;
int codePoint = name.codePointAt(0);

int decoded = 0;
{
PreparedStatement stmt = null;
byte[] encoded = new byte[3];
encoded[2] = (byte) (codePoint & 0x7F);
encoded[1] = (byte) ((codePoint >> 7) & 0x7F);
encoded[0] = (byte) ((codePoint >> 14) & 0x7F);

us7ascii = new String(encoded);

stmt.setString(1, us7ascii);
}

{
ResultSet rs = null;
// for single byte, us7ascii is same as utf8, encoding is optional
byte[] encoded = rs.getString(1).getBytes("US-ASCII");
decoded |= encoded[0] << 14;
decoded |= encoded[1] << 7;
decoded |= encoded[2];

String read = new String(new int[] { decoded }, 0, 1);
System.out.println("汉字:" + name + " => code point(" + codePoint + ") => US7-ASCII (" + us7ascii + ") => "
+ read);
}

输出如下,注意,在数据库它已经不是原来的样子,像是加密一样,所以我们直接用 SQL 查看数据库时是不正确的:

你可以考虑把你的列改成 nvarchar2 试下,看它是否正常。 


这样做看起来很奇怪对吧,不如我们直接把包括汉字的列当成 blob 算之类的二进制类型来保存算了,这样反正更简单,只是这些办法都没办法再通过 SQL 客户端来查数据确认你的程序正确,只能通过程序来编解码。



具体跟我说说怎么回事儿,你的业务流,用request 设定字符集啊,如果是 写成josn 文件,就用response 设定字符集

  • oracle sql 鍒ゆ柇 瀛楁鏄惁鏄眽瀛
    绛旓細浣跨敤鍑芥暟length涓巐engthb鏉ュ垽鍒紝鏄熀浜庝腑鏂囧瓧绗﹀崰鐢2~4涓瓧鑺傦紝鑰孉SCII瀛楃鍗犵敤涓涓瓧鑺傦紝閭d箞瀵规瘮LENGTH涓嶭ENGTHB灏变細涓嶄竴鏍枫傝繖鏍峰氨鑳藉垽鍒瓧娈典腑鏄惁鍖呭惈涓枃瀛楃锛屼絾鏄窡ASCIISTR涓鏍凤紝濡傛灉閲岄潰鐨勯潪ASCI瀛楃鍖呭惈闈炰腑鏂囷紝瀹冧竴鏍蜂笉鑳藉垽鍒備緷鐒舵湁鍙栧阀瀚岀枒銆係ELECT NAME_ONE FROM TEST WHERE LENGTH(NAME_ONE...
  • 骞跺彂杩炴帴鏁颁富瑕佷笌浠涔堟湁鍏(2涓皬鏃)
    绛旓細IIS杩炴帴鏁版寚骞跺彂杩炴帴鏁拌鍒嗗嚑绉嶆儏鍐碉細1.鐢ㄦ埛鎵撳紑浣犵殑椤甸潰锛屽氨绠楀仠鐣欏湪椤甸潰娌℃湁瀵规湇鍔″櫒鍙戝嚭浠讳綍璇锋眰锛岄偅涔堝湪鐢ㄦ埛鎵撳紑涓闈互鍚庣殑20鍒嗛挓鍐呬篃閮借绠椾竴涓湪绾匡紝灏辨槸璇翠綘50浜虹殑缃戠珯20鍒嗛挓鍐呭彲浠ユ帴鍙椾笉鍚岀敤鎴锋墦寮50涓〉闈2.涓婇潰B鐨勬儏鍐电敤鎴风户缁墦寮鍚屼竴涓綉绔欑殑鍏朵粬椤甸潰锛岄偅涔堝湪绾夸汉鏁版寜鐓х敤鎴锋渶鍚庝竴娆$偣鍑...
  • 鐩墠璁$畻鏈虹殑鍙戝睍瓒嬪娍鏄粈涔?
    绛旓細璁$畻鏈虹殑鍙戝睍瓒嬪娍濡備笅锛1銆佸法鍨嬪寲锛屾寚璁$畻鏈哄叿鏈夋瀬楂樼殑杩愮畻閫熷害銆佸ぇ瀹归噺鐨勫瓨甯冪┖闂达紱2銆佸井鍨嬪寲锛屽ぇ瑙勬ā鍙婅秴澶ц妯¢泦鎴愮數璺彂灞曠殑蹇呯劧锛3銆佺綉缁滃寲锛岃绠楁満鎶鏈拰閫氫俊鎶鏈揣瀵嗙粨鍚堢殑浜х墿锛4銆佹櫤鑳藉寲锛岃璁$畻鏈鸿兘澶熸ā鎷熶汉绫荤殑鏅哄姏娲诲姩銆
  • 2000鍚庤绠楁満鍙戝睍瓒嬪娍
    绛旓細鐩墠涓栫晫涓婃ц兘鏈楂樼殑閫氱敤璁$畻鏈哄凡閲囩敤涓婁竾鍙拌绠楁満骞惰,缇庡浗鐨凙SCI璁″垝宸茬粡瀹屾垚姣忕12銆3涓囦嚎娆″苟琛屾満銆傜洰鍓嶆鍦ㄧ爺鍒30涓囦嚎娆″拰100涓囦嚎娆″苟琛岃绠楁満銆傜編鍥藉彟涓椤硅鍒掔殑鐩爣鏄2010骞村乏鍙虫帹鍑烘瘡绉掍竴鍗冧竾浜挎骞惰璁$畻鏈(Petaflops璁$畻鏈),鍏跺鐞嗘満灏嗛噰鐢ㄨ秴瀵奸噺瀛愬櫒浠,姣忎釜澶勭悊鏈烘瘡绉100浜挎,鍏辩敤10涓囦釜澶勭悊鏈哄苟琛屻備笓鐢ㄨ绠楁満...
  • ODBC鍜孞DBC鏄仛浠涔堢殑?
    绛旓細鐢∣DBC 鍙互璁块棶鍚勭被璁$畻鏈轰笂鐨凞B鏂囦欢锛岀敋鑷宠闂Excel 琛ㄥ拰ASCI I鏁版嵁鏂囦欢杩欑被闈炴暟鎹簱瀵硅薄銆侸DBC锛欽DBC锛圝ava DataBase Connectivity,java鏁版嵁搴撹繛鎺ワ級鏄竴绉嶇敤浜庢墽琛孲QL璇彞鐨凧ava API锛屽彲浠ヤ负澶氱鍏崇郴鏁版嵁搴撴彁渚涚粺涓璁块棶锛屽畠鐢变竴缁勭敤Java璇█缂栧啓鐨勭被鍜屾帴鍙g粍鎴愩侸DBC鎻愪緵浜嗕竴绉嶅熀鍑嗭紝鎹鍙互鏋勫缓鏇...
  • 鍦╓in2000绯荤粺閲屾庝箞鎺у埗鍚勭被绔彛?
    绛旓細1560=asci-val 1561=facilityview 1562=pconnectmgr 1563=cadabra-lm 1564=pay-per-view 1565=winddlb 1566=corelvideo 1567=jlicelmd 1568=tsspmap 1569=ets 1570=orbixd 1571=rdb-dbs-disp1572=Chipcom License Manager 1573=itscomm-ns 1574=mvel-lm 1575=oraclenames 1576=moldflow-lm 1577=hypercube-lm ...
  • 鐢佃剳鐨勭鍙i兘鏈夊摢浜,鍒嗗埆鏈変粈涔堜綔鐢
    绛旓細1560 asci-val1561 facilityview1562 pconnectmgr1563 cadabra-lm1564 pay-per-view1565 winddlb1566 corelvideo1567 jlicelmd1568 tsspmap1569 ets1570 orbixd1571 rdb-dbs-disp1572 Chipcom License Manager1573 itscomm-ns1574 mvel-lm1575 oraclenames1576 moldflow-lm1577 hypercube-lm1578 Jacobus License Manager...
  • 鍏充簬鐢佃剳鐨勭鍙i棶棰
    绛旓細1560 asci-val1561 facilityview1562 pconnectmgr1563 cadabra-lm1564 pay-per-view1565 winddlb1566 corelvideo1567 jlicelmd1568 tsspmap1569 ets1570 orbixd1571 rdb-dbs-disp1572 Chipcom License Manager1573 itscomm-ns1574 mvel-lm1575 oraclenames1576 moldflow-lm1577 hypercube-lm1578 Jacobus License Manager...
  • 16028鏄釜浠涔堢鍙
    绛旓細1560 asci-val1561 facilityview1562 pconnectmgr1563 cadabra-lm1564 pay-per-view1565 winddlb1566 corelvideo1567 jlicelmd1568 tsspmap1569 ets1570 orbixd1571 rdb-dbs-disp1572 Chipcom License Manager1573 itscomm-ns1574 mvel-lm1575 oraclenames1576 moldflow-lm1577 hypercube-lm1578 Jacobus License Manager...
  • 1706绔彛
    绛旓細1560 asci-val 1561 facilityview 1562 pconnectmgr 1563 cadabra-lm 1564 pay-per-view 1565 winddlb 1566 corelvideo 1567 jlicelmd 1568 tsspmap 1569 ets 1570 orbixd 1571 rdb-dbs-disp 1572 Chipcom License Manager 1573 itscomm-ns 1574 mvel-lm 1575 oraclenames 1576 moldflow-lm 1577 hypercube-lm ...
  • 扩展阅读:oracle财务软件教程 ... oracle erp系统叫什么 ... oracle正版官网 ... table partition ... oracle limit ... oracle rownum ... oracle ebs license ... oracle查询所有索引信息 ... oracle cloud 免费 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网