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、设置好后,关闭服务器,再重新启动,就可生效了。