【摘自网上】SQL support Chinese

alter database partech Collate  Chinese_PRC_CI_AS

 

COLLATE Chinese_PRC_CS_AS_WS NULL,  /* set this field to support Chinese */

 

Chinese_PRC   简体中文,拼音排序 

_CS                   区分大小写 

_AS                   区分重音 

_KS                   区分假名 

_WS                   区分宽度

 

区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。 

区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项, 

比较还将重音不同的字母视为不等。 

区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。 

区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项

 

Windows 排序规则名称 

在 COLLATE 子句中指定 Windows 排序规则名称。Windows 排序规则名称由排序规则指示器和比较风格构成。

语法 

< Windows_collation_name > :: =

    CollationDesignator_<ComparisonStyle>

    < ComparisonStyle > ::= 

        CaseSensitivity_AccentSensitivity 

        [_KanatypeSensitive [_WidthSensitive ] ] 

        | _BIN

参数 

CollationDesignator

指定 Windows 排序规则使用的基本排序规则。基本排序规则包括:

当指定按字典排序时应用其排序规则的字母表或语言

 

用于存储非 Unicode 字符数据的代码页。 

例如 Latin1_General 或法文,两者都使用代码页 1252,或土耳其文,它使用代码页 1254。

CaseSensitivity

CI 指定不区分大小写,CS 指定区分大小写。

AccentSensitivity

AI 指定不区分重音,AS 指定区分重音。

KanatypeSensitive

Omitted 指定不区分大小写,KS 指定区分假名类型。

WidthSensitivity

Omitted 指定不区分宽度,WS 指定区分宽度。

BIN

指定使用二进制排序次序。

 

 

 

1:安装时不要选 Hide advice configuration  options。然后再 Collation designator and order  中选择 Chinese_PRC

 

2:在建表时指明某个字段的语言

 

方法 COLLATE Chinese_PRC_CS_AS_WS

 

示例:

 

create table test

(

a varchar(255) COLLATE Chinese_PRC_CS_AS_WS NULL, 

b varchar(255) COLLATE sql_latin1_general_cp1_ci_as NULL 

)

 

insert test values('中文','中文')

 

插入后 字段 a 为 中文 ,b 为 ??

 

3:修改数据库的排序方法为Chinese_PRC_CI_AS;将Varchar类型设置为nvarchar类型;

 

---------------------------------------------------------------------------

 

 

有一点不太明白的是,实际上很多时候varchar存汉字也是没有问题的,不会有乱码。所以varchar存汉字出现乱码还应该有别的原因吧?

 

@Cheese 

你说的不错,varchar确实可以存中文,这只是解决乱码问题的一种方法。至于原因,应该是和我装的Sql Server有关,因为在其他的人的SqlServer上并不会出错。原因大概有两种: 

1: 

 

安装时选了 Hide advice configuration options 

 

然后再 Collation designator and order 中不是选择 Chinese_PRC 

2: 

 

在建表时没有指明某个字段的语言 

 

方法 COLLATE Chinese_PRC_CS_AS_WS 

 

示例: 

 

create table test 

a varchar(255) COLLATE Chinese_PRC_CS_AS_WS NULL, 

b varchar(255) COLLATE sql_latin1_general_cp1_ci_as NULL 

 

insert test values('中文','中文') 

 

插入后 字段 a 为 中文 ,b 为 ??

我的总结:

对于varchar中文乱码的可能大概有两个,一个是因为系统环境对中文支持不好。

再一个是因为数据库安装时选了 Hide advice configuration options 

然后再 Collation designator and order 中不是选择 Chinese_PRC

不管怎么样,在存中文的时候最好用nvarchar,存字母的时候用varchar。

 

 

---------------------------------------------------------------------------

 

SQL server 中 varchar 插入汉字乱码的解决办法

 

方法一(测试过可以):

用alter database 数据库 Collate  Chinese_PRC_CI_AS --更改数据库排序规则

或在企业管理器里改 

数据库—右健—属性里

 

方法二:

1.数据库存储多语言的字段要用NText or Nvarchar,才支持多语言,以unicode存储 

2.Sql语句如 insert table (a) values(N'value')才可以,update也同样了 

3.web页面要用utf-8编码,最好加上<META http-equiv="Content-Type" content="text/html; charset=utf-8">

Asp.net web.config中编码需要设置为utf-8 

 

方法三:

1、右击你所建的数据库,点击“属性”,选择“选项”并点击。将其中的排序规则设置为:Chinese_PRC_CI_AS(选择下拉列表框即可设置),然后“确定“。 

2、在表中将你的汉字字段的数据类型设置为nvarchar型或ntext型,设置前最好先将表中的数据全部删除。(不要使用varchar或text型,因为它们只会继续使你的数据乱码)。 

3、设置好后,关闭服务器,再重新启动,就可生效了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值