修改sqlserver字元集
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條或許不用,沒試過)
㈡ 怎麼查看SQLSERVER的字元集設置
user master
select SERVERPROPERTY(N'edition') as Edition --數據版本,如企業版、開發版等
SERVERPROPERTY(N'collation') as Collation --資料庫字元集
SERVERPROPERTY(N'servername') as ServerName --服務名
@@VERSION as Version --資料庫版本號
@@LANGUAGE AS Language --資料庫使用的語言,如us_english等
參考資料鏈接:http://www.cnblogs.com/fygh/archive/2012/05/15/2501598.html。
拓展:
1、SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。SQL語言的主要功能就是同各種資料庫建立聯系,進行溝通。按照ANSI(美國國家標准協會)的規定,SQL被作為關系型資料庫管理系統的標准語言。SQL Server是由Microsoft開發和推廣的關系資料庫管理系統(DBMS)。
2、SQL Server是由Microsoft開發和推廣的關系資料庫管理系統(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發的,並於1988年推出了第一個OS/2版本。Microsoft SQL Server近年來不斷更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用戶見面;SQL Server 2000是Microsoft公司於2000年推出,目前最新版本是2015年份推出的SQL SERVER 2015。
㈢ 怎樣改sqlserver2008資料庫的編碼
你可以使用
SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')
查看當前的編碼格式,但是我編程這么多年,沒有去刻意設置過資料庫的編碼,如果要放中文或者其他文本,用普通的varchar或者nvarchar都沒出現過問題
㈣ 如何改變sql server 2005資料庫的編碼方式為gbk形式
具體:
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))