请问怎么修改MS SQL数据库的编码方式啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问怎么修改MS SQL数据库的编码方式啊?相关的知识,希望对你有一定的参考价值。

sql server 2000的unicode编码有特殊性,仅仅在rails中使用utf8编码,和把全部rails项目文件格式改成utf8之外,还是不够的。仅仅这样做,只是部分中文字符能够正确处理,而且存入sql server2000中的中文数据,也完全是乱码。正确的配置方法应该如下。

1. ms sql server2000中数据字段全部要选择成n打头的类型,比如ntext,nvarchar等。

2.安装ADO Driver
安装one -click installer 来安装ruby 的话就已经安装了所有连接SQL Server使用的需求包.但是,并没有安装ADO Driver.
这样来安装它:

在Ruby目录下找到这个目录: \ruby\lib\ruby\site_ruby\1.8\DBD .例如:我的Ruby安装在D:\ruby中,所以是这个目录D:\ruby\lib\ruby\site_ruby\1.8\DBD 在该目录中创建一个ADO文件夹. 下载Ruby-DBI,将lib/dbd_ado/ADO.rb文件拷贝到X:/ruby/lib/ruby/site_ruby/1.8/DBD/ADO/ADO.rb

3. 配置database.yml:Java代码
development:
adapter: sqlserver
database: database_name
host: server_name
username: user_name
password: your_pw_here

development:
adapter: sqlserver
database: database_name
host: server_name
username: user_name
password: your_pw_here

4.在environment.rb添加下面代码
require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8

在这里稍微解释下第四部分的设置。sql server 2000中使用的unicode 并非是utf8,ado的默认链接编码都是当前系统设置的code pages相关的。

一般的windows设置都是非unicode的,比如简体中文windows系统下一般都是gb2312, 在rails中database.yml设置encoding: utf8,对于sql server没有任何用处。

为了迫使sql server接受utf8数据,必须修改ado链接的code pages值为utf8,才能让ado部分代码在接受rails传入的utf8数据之后,不做任何额外的处理. 否则的话,ado部分代码会根据当前系统的默认code pages值来处理这里字符数据。

于是在中文windows系统上,从utf8的rails项目中传入的数据,会被当作gb2312编码的数据来传递到sql server2000中,于是sql server2000中存入的数据会成为乱码,也有部分数据在处理过程中出错,导致sql 语句执行出错。比如常见的中文字符右边的单引号会不见的情况。

不设置 WIN32OLE.codepage = WIN32OLE::CP_UTF8,你的整个系统编码配置是这样的
rails(utf8)<-->ado(根据当前系统cp来取得编码,或是gb2312或是其他)<-->sql server 2000 (unicode)
整个系统编码不一至

WIN32OLE.codepage = WIN32OLE::CP_UTF8 这句代码就是为了更改cp值.整个系统编码配置是这样的
rails(utf8)<-->ado(utf8)<-->sql server 2000 (unicode)
整个系统编码一至,整个系统中不会再出现任何乱码.

注:以上转自:jack发表在javaeye网站上的文章,地址:http://www.javaeye.com/topic/53877

database.yml也可以用以下的配置试试(用下面这种的话第1条或许不用,没试过)
参考技术A 具体:
1.sp_helpsort
SELECT SERVERPROPERTY ('Collation')
查看排序规则.
应该字符集关.

2.更改服务器排序规则
更改 SQL Server 2005 实例默认排序规则操作能比较复杂包括步骤:

确保具重新创建用户数据库及些数据库所象所需全部信息或脚本
使用工具(例容量复制)导所数据
删除所用户数据库
重新 setup 命令 SQLCOLLATION 属性指定新排序规则 master 数据库例:
复制代码
start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI
关重新 master 数据库详细信息请参阅何重新 SQL Server 2005 Master 数据库
创建所数据库及些数据库所象
导入所数据
注意:
创建每新数据库指定默认排序规则更改 SQL Server 2005 实例默认排序规则

3.设置更改数据库排序规则
创建新数据库使用列内容指定排序规则:
CREATE DATABASE 语句 COLLATE 句
SQL Server Management Studio.
SQL 管理象 (SMO) Database.Collation 属性
未指定排序规则则使用服务器排序规则
使用 ALTER DATABASE 语句 COLLATE 句更改用户数据库创建任何新象排序规则使用语句能更改任何现用户定义表列排序规则使用 ALTER TABLE COLLATE 句更改些列排序规则
更改数据库排序规则需要更改列内容:
数据库默认排序规则新默认排序规则应用于数据库续创建所列、用户定义数据类型、变量参数根据数据库定义象解析 SQL 语句指定象标识符使用新默认排序规则
系统表任何 char、varchar、text、nchar、nvarchar 或 ntext 列更改使用新排序规则
存储程用户定义函数所现 char、varchar、text、nchar、nvarchar 或 ntext 参数标量返值更改使用新排序规则
char、varchar、text、nchar、nvarchar 或 ntext 系统数据类型基于些系统数据类型所用户定义数据类型更改使用新默认排序规则

SQL code :

1.数据库字符集修改:
alter database dbname collate Chinese_PRC_CI_AS

2.

--1. 数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO

ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO

/*====================================*/

--2. 表列指定排序规则
CREATE TABLE tb(
col1 varchar(10),
col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
GO

ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN
GO

ALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN
GO

/*====================================*/

--3. 字符变量参数应用排序规则
DECLARE @a varchar(10),@b varchar(10)
SELECT @a='a',@b='A'

--使用排序规则 Chinese_PRC_CI_AS
SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a <>@b' END
--结:@a=@b

--使用排序规则 Chinese_PRC_BIN
SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a <>@b' END
--结:@a <>@b

3.

ALTER TABLE tb
ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS
--区写
ALTER TABLE tb
ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CS_AS
--区写
数据库
ALTER DATABASE database
COLLATE Chinese_PRC_CS_AS
--区写

ALTER DATABASE database COLLATE Chinese_PRC_CI_AS --区写

.安装SQL选择区写
或安装完重建mastar选择区
C:/Program Files/Microsoft SQL Server/80/Tools/Binn/rebuildm.exe

二.sql server 8.0版本才7.0及其支持
alter database 数据库 COLLATE Chinese_PRC_CS_AS
修改排序规则改写敏排序规则
修改表用alter table语句
修改库默认排序规则用alter datebase语句
修改整服务器默认排序规则用Rebuildm.exe重建master库
--指定排序规则

--示例
select replace('AbacB' collate Chinese_PRC_CS_AS_WS,'B','test')

--要求表支持,则建表指定排序规则,replace用写排序规则

--示例
create table tb(a varchar(20) collate Chinese_PRC_CS_AS_WS)
insert tb values('Abac')

select replace(a,'a','test') from tb

drop table tb

指定排序规则即

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

指定使用二进制排序序

目前查询区要改免反悔查询:
select * from a
/*
a_nam a_add
---------- ----------
1 aa
1 bb
2 cc
2 vv
2 kk
3 dd
3 ee
4 dd
5 ee
6 yy
6 yy

(11 row(s) affected)
*/
现我查询a_add = 'aa''Aa'等等行
Example 1:

select * from a
where a_add collate Chinese_PRC_CS_AS_WS = 'aa'
/*
a_nam a_add
---------- ----------
1 aa

(1 row(s) affected)
*/

Example 2:

select * from a
where a_add collate Chinese_PRC_CS_AS_WS = 'Aa'
/*
a_nam a_add
---------- ----------

(0 row(s) affected)
*/

三.面记住用笨转化ascii
select * from a
where
ascii(substring(a_add,1,1)) = ascii(substring('Aa',1,1))
and
ascii(substring(a_add,2,1)) = ascii(substring('Aa',2,1))
/*
a_nam a_add
---------- ----------

(0 row(s) affected)
*/

三:任何版本都
select * from a
where cast(a_add as varbinary(10))= cast('aa' as varbinary(10))

请教 MS SQL 2000数据导出的问题

我想把一台机器上面的ms sql server里的数据导导另外一台电脑里,我想把原来数据导出成后缀名是:“mdf”和“ldf”的两个文件然后附加导另外一热爱电脑上去,请问各位高手怎么将sql里的数据导出成后缀是“mdf”“ldf”两个文件啊?多谢!

很简单的,不用导出的,只要拷贝一下就行了。第一步:找到原机器sql2000的安装目录,如C:\Program Files\Microsoft SQL Server\MSSQL\Data,找到下面你要的后缀名为“mdf”和“ldf的两个文件,拷贝到另一台电脑的一个临时目录下。第二步,在另一台你热爱的电脑上,打开SQL2000“企业管理器”,展开“控制台根目录”,右击“数据库”,选择“所有任务”,再选择“附加数据库”,弹出“附加数据库”对话框,找到那个临时目录,选择原来拷贝的“mdf”文件,接下去按要求操作,不用我介绍了吧。 参考技术A 本身就是mdf和ldf文件
一、在查询分析器中执行
select name,filename from sysfiles
找到该数据库的路径
二、停止服务管理器
三、找到这两个文件,并复制出来
四、在目的电脑上附加该数据库本回答被提问者采纳
参考技术B 用备份也可以啊! 全备后在新库上建个库还原即可.

以上是关于请问怎么修改MS SQL数据库的编码方式啊?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 怎么查看当前编码格式

我很苦恼啊!求教:mysql里面显示数据正常,但用jsp页面读取并显示出来时却是乱码的!

怎么把UTF-8编码的文本批量改成ANSI啊!!!!!!!!!?

怎么将sql文件加载到数据库

oracle sql developer的脚本出现乱码?

急!请问如何将TXT文档从UTF-8编码转为GBK编码啊?