注册 登录
MySQL社区 返回首页

的个人空间 http://www.mysqlpub.com/?0 [收藏] [复制] [RSS]

日志

mysql_oracle_sysbase数据库字符集修改

已有 913 次阅读2008-7-2 09:51 |个人分类:数据库

天气: 晴朗
心情: 平静

如何修改MySQL的字符集
修改mysql的默认字符集是通过修改它的配置文件来实现的。一般分两种情况:

Windows平台
windows下的mysql配置文件是my.ini,一般在c:\windows\my.ini或者c:\winnt\my.ini可以直接在这个文件里面加上

default-character-set=gbk #或gb2312,big5,utf8

然后重新启动mysql

service mysql restart

/etc/init.d/mysql restart

或用其他方法重新启动,就生效了。

Unix平台
linux下的mysql配置文件是my.cnf,一般是/etc/my.cnf,如果找不到可以用find命令找一下:

find / -name my.cnf

在这个文件里面加上

default-character-set=gbk #或gb2312,big5,utf8

然后重新启动mysql

net stop mysql
net start mysql

就生效了。

 

###################################################################################
#################################  oracle part  ####################################
###################################################################################
Q]怎么样查看数据库字符集
[A]数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

[Q]怎么样修改字符集
[A]8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。
Startup nomount;
Alter database mount exclusive;
Alter system enable restricted session;
Alter system set job_queue_process=0;
Alter database open;
Alter database character set zhs16gbk;


具体实例:

Oracle修改字符集问题:  
  通过语句,SELECT   *   FROM   NLS_DATABASE_PARAMETERS查出  
  NLS_LANGUAGE AMERICAN  
  NLS_TERRITORY AMERICA  
  NLS_CURRENCY $  
  NLS_ISO_CURRENCY AMERICA  
  NLS_NUMERIC_CHARACTERS .,  
  NLS_CALENDAR GREGORIAN  
  NLS_DATE_FORMAT DD-MON-YY  
  NLS_DATE_LANGUAGE AMERICAN  
  NLS_CHARACTERSET US7ASCII  
  NLS_SORT BINARY  
  NLS_NCHAR_CHARACTERSET US7ASCII  
  NLS_RDBMS_VERSION 8.0.5.0.0 

现想将"US7ASCII"改为"ZHS16GBK",应该怎样操作??

回答:

SQL>   SHUTDOWN   IMMEDIATE;       --   or   NORMAL  
          <do   a   full   backup>  
   
  SQL>   STARTUP   MOUNT;  
  SQL>   ALTER   SYSTEM   ENABLE   RESTRICED   SESSION;  
  SQL>   ALTER   SYSTEM   SET   JOB_QUEUE_PROCESSES=0;  
  SQL>   ALTER   DATABASE   OPEN;  
  SQL>   ALTER   DATABASE   CHARACTER   SET   <new_character_set_name>;  
  SQL>   SHUTDOWN   IMMEDIATE;       --   or   NORMAL  
  SQL>   STARTUP;

###################################################################################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

############################################################################
############################ sybase part ##################################
############################################################################


SYBASE字符集的配置
1、在操作系统上运行locale
如AIX:
LANG=en_US
LC_COLLATE="en_US"
LC_CTYPE="en_US"
LC_MONETARY="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_MESSAGES="en_US"
LC_ALL=
LANG对应的设置为en_US

2、查看/sybase/locales/locales.dat
找到对应操作系统下的字符集配置,如AIX
[aix]
   locale = C, us_english, iso_1
   locale = En_US, us_english, iso_1
   locale = en_US, us_english, iso_1
   locale = default, us_english, iso_1
   locale = En_US.IBM-850, us_english, cp850
   locale = en_US.ISO8859-1, us_english, iso_1
   locale = En_JP, us_english, sjis
   locale = en_JP, us_english, eucjis
   locale = Fr_FR, french, cp850
   locale = fr_FR, french, iso_1
   locale = Fr_FR.IBM-850, french, cp850
   locale = fr_FR.ISO8859-1, french, iso_1
   locale = Fr_CA, french, cp850
   locale = fr_CA, french, iso_1
   locale = Fr_CA.IBM-850, french, cp850
   locale = fr_CA.ISO8859-1, french, iso_1

找到对应locale=en_US的行,如上面为:
locale = en_US, us_english, iso_1
因此SYBASE使用的字符集为iso_1。

3、可以在isql中查看目前使用的字符集
isql -Usa -P
>;sp_helpsort
>;go

查看客户端使用的字符集:
isql -Usa -P
>;select @@client_csname
>;go

如果客户端和服务器字符集不一致,便会产生“Error converting client characters into server's character set.”的错误

简体中文字符集为:cp932,但使用iso_1、utf8等都可以,关键是客户端和服务器字符集要保持一致。

4、更改字符集的方法:
vi /sybase/locales/locales.dat中对应的操作系统中对应的环境变量

1>;select name,id from syscharsets
2>;go
找到你要更改的字符集名称对应的id(假设为117)
1>;sp_configure "default character set id",1
2>;go

以上以AIX为例,AIX上的SYBASE缺省不用更改字符集,但HPUX需要更改的,更改方法参考上面。不更改的话在使用isql,bcp也可通过-J参数制定字符集,如isql -J cp932等。
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
######################################################################################

 

发表评论 评论 (1 个评论)

回复 kider 2008-12-2 23:31
不错哦

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-22 17:03 , Processed in 0.041482 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部