1. 介绍
Oracle数据库是目前应用最广泛的一种关系型数据库,在开发过程中,经常会遇到需要修改Oracle编码的情况。修改Oracle编码就是修改Oracle数据库中的字符集,包括数据库、表、列等所有字符数据类型的编码。本文将详细介绍修改Oracle编码的方法。
2. 修改Oracle编码的必要性
当使用不同的字符集将数据存储在同一个数据库中时,可能会遇到两个问题:
2.1 乱码
如果将多种不同的字符集存储在同一个数据库中,在一些情况下可能会出现乱码的问题。例如,当按照一个字符集存储数据时,但是读取数据时使用了另外的字符集,那么查询结果会展示为乱码。这种情况可能会在Oracle客户端和Web应用程序之间的通信过程中发生。解决这个问题的办法是将所有数据存储在同一字符集中。
2.2 性能问题
当使用不同的字符集存储数据时,查询数据的速度可能会变慢。这是因为Oracle需要在查询和返回结果时进行字符集转换。如果将所有的数据存储在同一字符集中,查询数据的速度将会更加快速。
3. 修改数据库编码
如果需要修改整个Oracle数据库的字符集,可以按照以下步骤操作:
3.1 离线修改
1. 停止所有连接到数据库上的程序。
SHUTDOWN IMMEDIATE
2. 根据需要备份数据库。
3. 运行ALTER DATABASE命令更改数据库字符集。
ALTER DATABASE CHARACTER SET character_set_name;
例如,如果要将整个数据库的字符集修改为UTF-8,则可以使用以下命令:
ALTER DATABASE CHARACTER SET UTF8;
4. 重新启动数据库。
STARTUP
3.2 在线修改
如果需要在线修改Oracle数据库字符集,可以按照以下步骤操作:
3.2.1 检查是否可以修改
在进行在线修改之前,首先需要检查是否可以修改字符集:
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
如果输出的值为读取模式,则可以进行修改;如果输出的值为只读,则无法修改。
3.2.2 修改字符集
1. 在Oracle服务器上,以sysdba身份登录。
2. 运行以下命令:
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE CHARACTER SET character_set_name;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
ALTER SYSTEM SET AQ_TM_PROCESSES=1;
ALTER SYSTEM DISABLE RESTRICTED SESSION;
例如,如果要将数据库字符集修改为UTF-8:
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE CHARACTER SET UTF8;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
ALTER SYSTEM SET AQ_TM_PROCESSES=1;
ALTER SYSTEM DISABLE RESTRICTED SESSION;
3. 重新启动数据库。
SHUTDOWN IMMEDIATE;
STARTUP;
4. 修改表和列的字符集
如果已经有一个数据库和表,并且需要更改这个表或其中的列的字符集,可以按照以下步骤操作:
4.1 查看表和列的当前字符集
运行以下命令查看表和列的当前字符集:
SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARSETID, NUMERIC_PRECISION, NUMERIC_SCALE FROM ALL_TAB_COLUMNS WHERE OWNER='username';
在查询结果中,CHARSETID列代表字符集的ID。Oracle支持以下字符集的ID:
1. 1: US7ASCII
2. 2: WE8DEC
3. 3: WE8HP
4. 4: WE8EBCDIC37
5. 5: WE8EBCDIC500
6. 6: WE8EBCDIC285
7. 8: WE8ISO8859P1
8. 9: EE8ISO8859P2
9. 10: SE8ISO8859P3
10. 11: NEE8ISO8859P4
11. 12: CL8ISO8859P5
12. 13: AR8ISO8859P6
13. 14: EL8ISO8859P7
14. 15: IW8ISO8859P8
15. 16: WE8ISO8859P9
16. 17: NE8ISO8859P10
17. 18: TH8TISASCII
18. 19: TH8TISEBCDIC
19. 20: WE8ISO8859P15
20. 21: S8SBCS
21. 22: DK8ISO8859P1
22. 23: EE8MSWIN1250
23. 24: LT8MSWIN1257
24. 25: LV8MSWIN1257
25. 26: BLT8ISO8859P13
26. 27: LV8ISO8859P13
27. 28: BS2000
28. 29: AR8MSWIN1256
29. 30: EL8MSWIN1253
30. 31: IW8MSWIN1255
31. 32: TR8MSWIN1254
32. 33: WE8MSWIN1252
33. 34: BLT8MSWIN1257
34. 35: CL8MSWIN1251
35. 36: PT8MSWIN1252
36. 37: RU8MSWIN1251
37. 38: WE8MSWIN1254
38. 39: WE8MSWIN1253
39. 40: JA16EUC
40. 41: JA16EUCYEN
41. 42: JA16SJIS
42. 43: KO16KSC5601
43. 44: KO16DBCS
44. 45: ZHT32TRIS
45. 46: ZHT16DBT
46. 47: ZHT16BIG5
47. 48: JA16SJISTILDE
48. 49: JA16MACSJIS
49. 50: ZHS16CGB231280
50. 51: ZHS16DBCS
51. 52: ZHS16GBK
52. 53: AL32UTF8
53. 54: UTFE
54. 55: UTF8
55. 56: WE8ISO8859P5
56. 57: WE8MACROMAN8S
57. 58: WE8NCR4970S
58. 59: WE8NEXTSTEP
59. 60: AR8ARABICMAC
60. 61: WE8PC858
61. 62: WE8PC437
62. 63: EL8PC737
63. 64: IW8PC1507
64. 65: TR8PC857
65. 66: WE8PC860
66. 67: IS8PC861
67. 68: EE8MACCES
68. 69: WE8PC863
69. 70: LT8PC772
70. 71: ES8PC850
71. 72: CL8MACCYRILLIC
72. 73: F8EBCDIC1156
73. 74: D8EBCDIC1141
74. 75: IW8PC862
75. 76: IW8PC866
76. 77: CL8MACCYRILLICS
77. 78: CD8PC850
78. 79: HU8ABMOD
79. 80: N8PC865
80. 81: BLT8CP921
81. 82: LV8RST104090
82. 83: BLT8EBCDIC1112C
83. 84: LV8PC1117
84. 85: US8PC437
85. 86: CS9MSWIN1258
86. 87: N9MSWIN1254
87. 88: WE8PC852
88. 89: EE8PC852
89. 90: TR8MACTURKISH
90. 91: XISO8859P1
91. 92: XISO8859P2
92. 93: XISO8859P3
93. 94: XISO8859P4
94. 95: XISO8859P5
95. 96: XISO8859P6
96. 97: XISO8859P7
97. 98: XISO8859P8
98. 99: XISO8859P9
99. 100: XISO8859P10
100. 101: US8DEC
101. 102: WE8HPV1
102. 104: WE8ISO8859P1
103. 105: EE8ISO8859P15
104. 106: RU8PC855
105. 107: RU8BESTA
106. 108: IW8PC857
107. 109: IW8PC860
108. 110: US8PC864
109. 111: TR8PC857
110. 112: WE8PC858
111. 113: EL8PC851
112. 114: EL8PC853
113. 115: US8PC622437
114. 120: JA16VMS
115. 121: JA16EBCDIC930
116. 122: RU8IBM1154
117. 123: TR8MACTURKISHS
118. 124: NE8PC863
119. 125: TH8MACTHAI
120. 126: TH8MACTHAIS
121. 130: AR8MSWIN1256E
122. 134: LA8PASSPORT
123. 138: US8BS2000
124. 140: D8BS2000
125. 142: F8BS2000
126. 150: AR8NAFITHA711T
127. 152: CN8GB2312
128. 153: ZH16GBK
129. 154: VN8MSWIN1258
130. 155: VN8VN3
131. 156: VN8VN3T
132. 157: JA16MACPT
133. 158: JA16EBCDIC930R
134. 159: LA8ISO6937
135. 160: PT8ISO6937
136. 161: HU8ISO6937
137. 162: EL8ISO8859P7
138. 163: TR8TRADITIONAL
139. 164: WE8NEXTSTEP5
140. 165: BG8PC852
141. 166: EL8PC737
142. 170: TR8MACTURKISH2
143. 171: WE8MSWIN1256
144. 172: AR8IBMP852
145. 173: ZH8ISO8859P1
146. 174: ZH8GB2312
147. 175: ZH8HKSCS
148. 176: ZH8CGB231280
149. 177: BG8ISO8859P5
150. 178: EL8ISO8859P8
151. 180: WE8PC860MULTIBYTE
152. 181: UTF16
153. 182: CE8ISO8859P10
154. 183: WE8ISO8859P2
155. 188: JA16MACCE
156. 189: TH8MACTHAI2
157. 190: ZH8BIG5HKSCS
158. 191: ZH8GB2312RAW
159. 192: ZH8GB18030
160. 193: JA16PROC
161. 194: JA16EUCTILDE
162. 195: KO16MSWIN949
163. 196: ZHS32GB18030
164. 197: AR8MSWIN1256EBCDIC
165. 200: JA16SJISYEN
166. 201: ZHS16GBK2K
167. 202: UTF32
168. 203: AL16UTF16
169. 204: KO16TILDE
170. 209: WE8ISO8859P13
171. 210: WE8ISO8859P14
172. 211: EE8ISO8859P4
173. 212: PT8ISO873
174. 213: BG