sybase乱码以及bcp导入问题

1.     JDBC连接串要有字符集设置
jdbc:sybase:Tds:192.168.3.11:5000/Wfis_db?charset=cp936
2.     服务器配置成cp936
(1)    使用isql查看当前已经安装的字符集
isql -Usa -Plongtop
>use master
>go
>select id,name from syscharsets
>go
id name
--- ----------------
   0 ascii_8
   1 iso_1
   2 cp850
20 defaultml
21 thaidict
22 iso14651
24 utf8bin
25 binary
39 altnoacc
45 altdict
46 altnocsp
47 scandict
48 scannocp
50 bin_iso_1
50 bin_cp850
51 dict
52 nocase
53 nocasep
54 noaccent
55 espdict
56 espnocs
57 espnoac
59 rusnocs
64 cyrnocs
65 elldict
69 hundict
70 hunnoac
71 hunnocs
73 turknoac
74 turknocs
129 cp932bin
130 dynix
137 gb2312bn
140 cyrdict
155 turdict
161 euckscbn
163 gbpinyin
165 rusdict
179 sjisbin
192 eucjisbn
194 big5bin

(41 rows affected)
从列表中看出没有安装cp936字符集

(2)    查看当前使用的缺省字符集
>sp_configure "default char"
>go
Parameter Name                 Default     Memory Used Config Value
         Run Value   Unit                 Type
------------------------------ ----------- ----------- ------------
         ----------- -------------------- ----------
default character set id                 2           0           2
                   2 id                   static

缺省字符集的id是2,查看上面的列表,可以得知是cp850

(3)    因为上面的列表中没有安装cp936,所以就安装cp936字符集
进入目录C:\sybase\charsets\cp936
运行命令 charset -Usa -Plongtop binary.srt cp936
运行完成后,系统就安装了cp936字符集

(4)    验证是否确实安装了cp936字符集
isql -Usa -Plongtop
>use master
>go
>select id,name from syscharsets
>go
id name
--- ------------------------------
   0 ascii_8
   1 iso_1
   2 cp850
20 defaultml
21 thaidict
22 iso14651
24 utf8bin
25 binary
39 altnoacc
45 altdict
46 altnocsp
47 scandict
48 scannocp
50 bin_iso_1
50 bin_cp850
50 bin_cp936
51 dict
52 nocase
53 nocasep
54 noaccent
55 espdict
56 espnocs
57 espnoac
59 rusnocs
64 cyrnocs
65 elldict
69 hundict
70 hunnoac
71 hunnocs
73 turknoac
74 turknocs
129 cp932bin
130 dynix
137 gb2312bn
140 cyrdict
155 turdict
161 euckscbn
163 gbpinyin
165 rusdict
171 cp936
179 sjisbin
192 eucjisbn
194 big5bin

(43 rows affected)
从列表中可以发现已经安装了cp936,id是171

(5)    把系统的当前缺省字符集设置为cp936
>sp_configure "default char",171
>go
In changing the default sort order, you have also reconfigured SQL Server's
default character set.
Parameter Name                 Default     Memory Used Config Value
         Run Value   Unit                 Type
------------------------------ ----------- ----------- ------------
         ----------- -------------------- ----------
default character set id                 2           0         171
                   2 id                   static

(1 row affected)
Configuration option changed. Since the option is static, Adaptive Server must
be rebooted in order for the change to take effect.
Changing the value of 'default character set id' to '171' increases the amount
of memory ASE uses by 6 K.
(return status = 0)

(6)    重启Sybase服务,使更改生效
第一次重启,系统会对已经存在的数据进行转换,转换完成后自动停止服务,只要再次启动服务就可以了。
===================================

使用bcp导入的时候,如果文件存在中文字符,需要设置客户端编码。
/$Sybase/locales/目录下存在locales.dat文件,根据系统的不同修改客户端编码,默认是iso_1。将local = C, us_english, iso_1中的iso_1修改为cp936.
再次执行bcp命令,会出现如下异常:
You cannot run the non-logged version of bulk copy in this database. Please check with the DBO.
原因是select into/bulkcopy没有打开
方法:
use master
go
sp_dboption YourDB,”select into/bulkcopy”,true
go
use YourDB
go
checkpoint
go

你可能感兴趣的:(sql,SQL Server,jdbc,Sybase,Go)