首先查看数据库编码:
select from nls_database_parameters where parameter ='NLS_CHARACTERSET';这个编码是否和你java的编码一致,如果不一致,建议先尝试修改java的编码,如果java编码不能改变,而且你有修改oracle码制的权限,并且可以修改(慎用!)
例如目前数据库环境的字符集是AL32UTF8,那么把它改成ZHS16GBK
1首先以sysdba的身份登录上去 conn /as sysdba
2关闭数据库shutdown immediate;
3以mount打来数据库,startup mount
4设置session
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
5启动数据库
alter database open;
6修改字符集
ALTER DATABASE CHARACTER SET ZHS16GBK;
这会可能会报错,提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
这条语句就可以了,TERNAL_USE提供的帮助就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部 *** 作时完全相同的。
7关闭,重新启动
SQL>shutdown immediate;
SQL> startup
当然字符集最好不要轻易修改,因为这会对数据库的数据有直接的影响,如果是生产环境的话,可能会造成不可估计得损失。
1备份代码:在进行任何修改之前,务必备份代码,以免修改过程中出现错误导致代码丢失。
2打开代码文件:使用文本编辑器打开Java代码文件,找到文件编码方式。
3转换编码方式:将文件编码方式从ANSI X34-1968改为UTF-8或其他UTF编码方式,具体步骤如下:
a在文本编辑器中找到“另存为”选项;
b在d出的对话框中选择编码方式为UTF-8或其他UTF编码方式;
c保存文件并关闭文本编辑器。
4检查代码:重新打开Java代码文件,检查代码是否能够正常编译和运行,以确保代码在编码转换过程中没有出现问题。
需要注意的是,如果Java代码中存在中文或其他非ASCII字符,转换编码方式可能会导致这些字符的乱码,此时需要手动修改相关字符的编码方式。如果您不确定如何进行 *** 作,建议咨询专业的软件工程师或相关技术支持人员。服务器端
修改数据库配置文件/etc/mycnf
character-set-server=utf8mb4
collation_server=utf8mb4_unicode_ci
重启MySQL(按照官方文档,这两个选项都是可以动态设置的,但是实际的经验是Server必须重启一下)
已有的表修改编码为utf8mb4
ALTER TABLE
tbl_name
CONVERT TO CHARACTER SET
charset_name;
使用下面这个语句只是修改了表的default编码
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
客户端
jdbc的连接字符串不支持utf8mb4,这个 这种方式 来解决的,如果服务器端设置了character_set_server=utf8mb4,则客户端会自动将传过去的utf-8视作utf8mb4。
Connector/J did not support utf8mb4 for servers 552 and newer
Connector/J now auto-detects servers configured with character_set_server=utf8mb4 or treats the Java encoding utf-8 passed using characterEncoding= as utf8mb4 in the SET NAMES= calls it makes when establishing the connection (Bug #54175)
其他的client端,比如php、python需要看下client是否支持,如果不能在连接字符串中指定的话,可以在获取连接之后,执行”set names utf8mb4″来解决这个问题;
因为utf8mb4是utf8的超集,理论上即使client修改字符集为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。修改eclipse的默认字符集和修改中文乱码方法如下
eclipse 中UTF-8设置
1windows->Preferences 打开"首选项"对话框;
2然后,general->Workspace,右 侧Text file encoding,选择Other,改变为UTF-8。
3Web->打开,把CSS、HTML、JSP、JavaScript、XML等设置为UTF-8。
或在这里更改, general->Content Types, 右侧Context Types树,点开Text,选择Java Source File,在下面的Default
encoding输入框中输入UTF-8,点Update,则设置Java文件编码为UTF-8。其他如果需要更改,方法一样。1 JDBC连接串要有字符集设置
jdbc:sybase:Tds:192168311:5000/Wfis_dbcharset=cp936
我项目中的写法:
Dburl=jdbc:sybase:Tds:angkor[服务器名或IP]:5000/angkor[数据库名]charset=eucgb
2 服务器配置成cp936
(3) 因为上面的列表中没有安装cp936,所以就安装cp936字符集
进入目录C:\sybase\charsets\cp936
运行命令 charset -Usa -Plongtop binarysrt cp936
运行完成后,系统就安装了cp936字符集
(4) 验证是否确实安装了cp936字符集
isql -Usa -Plongtop
>use master
>go
>select id,name from syscharsets
>go
id name
(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服务,使更改生效
第一次重启,系统会对已经存在的数据进行转换,转换完成后自动停止服务,只要再次启动服务就可以了。
(7) 更改DB客户端的字符集
DBArtisan中要更改客户端的字符集为cp936才能连接cp936的服务器
通过菜单\Logfile\Options打开对话框,选择Connection标签,
更改Client Character输入框的值为cp936。
数据库的charset修改为cp936时,使用isql按如下的方式
isql -Usa -Plongtop -Sdbserver -Jcp936java中定义一个字符串数组方式如下:
1String[] str={"AAA","BBB","CCC"};
2String str[]={"AAA","BBB","CCC"};
string类型和其他基本类型相似,创建数组时,有上述两种方式。根据下面这几个步骤,选择 *** 作
①
首先把MySQL的服务停掉
在运行窗口输入:net
stop
mysql
②
把服务器和客户端的字符集改成自己想用的字符集:GB2312或是utf8等……
具体 *** 作为:打开mysql安装目录下的myinitet;
找到default-character-set,将其改为自己想用的字符集:GB2312或是utf8等……,要注意的是这里有两个default-character-set,用ctrl+f定位在文件最前面输入default就会找到,都要改过来;
③
重启MySQL服务器,在运行窗口输入:net
start
mysql
④
最重要的是一点是,到这里我们已经能够解决乱码问题了,可问题是我们依然还会出现乱码问题,这是因为我们现在的表被创建的时候用的是默认的字符集(latin1),所以这时候我们要把表删除,然后重建就可以了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)