SQL Server 字符集介绍及修改方法演示

在这里插入图片描述


正确认识SQL Server的字符集

SQL Server 作为一个国际化产品,支持多语言环境。在 SQL Server 中,字符集被称为排序规则(即Collation)。排序规则不仅影响记录行的 sort 顺序,还影响中文显示是否乱码等。在 SQL Server 中,排序规则可在 3 处地方设置:

  • 服务器级别 =>instances
  • db库级别 =>databases
  • 表列级别 =>columns

下图所示为 SQL Server 默认情况下对 Collation 继承的方式。
在这里插入图片描述

即在 SQL Server 软件安装时我们可设置服务器级别的排序规则,也就是 instances 的排序规则。如下所示是使用 T-SQL 查询当前 instances 的排序规则信息:

--查询当前SQL Server服务器的排序规则

SELECT SERVERPROPERTY(N'Collation')

(no column name)
--------------------------------------------------
Chinese_PRC_CI_AS

默认排序规则是 Chinese_PRC_CI_AS

当然你也可以使用 SSMS 查看服务器属性:
在这里插入图片描述
在这里插入图片描述
若在创建 Databases 时我们未指定排序规则,Databases 则会使用 Instances 的排序规则。如下所示是通过 sql 代码查询 SQL Server 中 Databases 的排序规则信息:

--通过目录视图 sys.databases 查询 Databases 的排序规则
SELECT name,collation_name FROM sys.databases WHERE name = N'STUDR'; //将STUDY替换为数据库名
name    collation_name
-------------------------------------------------
STUDY    Chinese_PRC_CI_AS

当然你也可以使用 SSMS 通过查看数据库属性得知数据库的字符集。

而表中的列(columns)默认情况是继承 Databases 的排序规则(除非在创建表时对列的排序规则进行指定),我们可通过目录视图 sys.columns 查询表中 columns 的排序规则信息。

--注意:只有字符型的列才会显示排序规则信息,非字符型的显示为NULL
SELECT name, collation_name FROM sys.columns where collation_name is NOT NULL

注意:SQL Server 的排序规则只影响字符型的列,如 char, varchar, text, nchar, nvarchar, ntext,因此目录视图 sys.columns 中非字符型的排序规则显示为 NULL 。

在这里插入图片描述

选择合适的SQL Server字符集

在安装SQL Server时,你可能困惑应该选择哪种字符集,SQL Server或者Windows的。官方推荐使用SQL Server的字符集,而非Windows的字符集。原因是,SQL Server字符集是基于Windows衍生出来的,同时保证SQL Server版本间的兼容性。
可通过如下命令查看当前SQL Server支持的排序规则:

SELECT * from ::fn_helpcollations()

注意字符集的名字缩写与对应的的描述,如 CI 表示不区分大小写。
在这里插入图片描述

错误使用SQL Server的字符集

我们不难理解:只需保持 SQL Server 中 3 处字符集设置的地方:Instances、Databases、Columns 设置一致即是正确的使用方式。

那么当 SQL Server 中 Instances 与 Databases 对排序规则设置不一致时,将直接导致临时表#或##不能正常使用(临时表的列默认继承 tempdb 的排序规则,而 tempdb 则继承了 Instances 的排序规则)。

所以,我们应尽可能的正确设置 SQL Server 排序规则:

  • 正确的设置 SQL Server 排序规则 ,保持 Instances、Databases、Columns 中 3 处排序规则一致,默认字符集是 Chinese_PRC_CI_AS 。
  • 尽可能使用 nvarchar 等 Unicode 类型,而非 varchar 类型 。

在这里插入图片描述

修改字符集

安装 SQL Server 时,默认字符集是 Chinese_PRC_CI_AS ,如果安装完成后,我们想更改字符集,应该怎样操作呢?

注:再安装 SQL Server 时,可配置字符集。

修改数据库字符集

本例演示将数据库 STUDY 字符集从 Chinese_PRC_CI_AS 修改成 Latin1_General_100_CS_AS_SC。

修改方法一:

查看数据库属性,然后按照下图步骤进行修改:
在这里插入图片描述

注意:需要断开其他链接,否则会报错如下:
在这里插入图片描述

修改方法二:

在查询分析器中,输入如下命令:

ALTER DATABASE [STUDY] COLLATE Chinese_PRC_CI_AS

命令执行成功后,通过 sql 代码查询 SQL Server 中 Databases 的排序规则信息:

--通过目录视图 sys.databases 查询 Databases 的排序规则
SELECT name,collation_name FROM sys.databases WHERE name = N'STUDR'; //将STUDY替换为数据库名
name     collation_name
-------------------------------------------------
STUDY    Latin1_General_100_CS_AS_SC

修改成功!

修改服务器字符集

本例演示将服务器字符集从 Chinese_PRC_CI_AS 修改成 Latin1_General_100_CS_AS_SC。

服务器字符集的修改稍微复杂些

1)查看数据库安装路径

补充:(Windows Service) 各版本的默认安装路径
1 SQL Server 2008 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Release
2 SQL Server 2012 C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\SQLServer2012
3 SQL Server 2014 C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\SQLServer2014
4 SQL Server 2016 C:\Program Files\Microsoft SQL Server\140\Setup Bootstrap\SQLServer2016

本例使用的是SQL Server 2012,默认安装路径为 C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\SQLServer2012

2)使用管理员权限打开DOS命令行
在这里插入图片描述
3)切换进数据库安装文件目录

cd C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\SQLServer2012 

在这里插入图片描述
4)关闭SQL Server 后台服务

方式1:使用 Net stop 语句关闭 SQL Server 后台服务

Net stop STUDY

方式2:通过 Sql Server Configuration Manager 关闭 SQL Server 后台服务
在这里插入图片描述
5)运行语句修改字符集

Setup /QUIET /ACTION=REBUILDDATABASE /instancename=STUDY /SQLSYSADMINACCOUNTS=administrator /sapwd=123456 /sqlcollation=Latin1_General_100_CS_AS_SC 

格式说明:
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
/SQLSYSADMINACCOUNTS=accounts / [ SAPWD= StrongPassword ]
/SQLCOLLATION=CollationName)
注意: accounts 用户使用电脑管理员用户,CollationName 为需要变更的排序格式 。

在这里插入图片描述
6)待5)中命令执行完成后,执行如下命令检查服务器字符集是否修改成功

--查询当前SQL Server服务器的排序规则

SELECT SERVERPROPERTY(N'Collation')

(no column name)
--------------------------------------------------
Latin1_General_100_CS_AS_SC

修改成功!

在这里插入图片描述

 

参考文章:https://blog.csdn.net/wstoneh01/article/details/50588720

VBA(Visual Basic for Applications)是一种用于编写宏和自定义功能的编程语言,它通常与Microsoft Office应用程序(如Excel、Word和Access)一起使用。SQL Server是由Microsoft开发的关系型数据库管理系统。 在VBA中,可以使用ADO(ActiveX Data Objects)来连接和操作SQL Server数据库。ADO是一种用于访问数据的技术,它提供了一组对象和方法,可以通过VBA代码与数据库进行交互。 要使用VBA连接SQL Server数据库,首先需要添加对Microsoft ActiveX Data Objects库的引用。然后,可以使用以下步骤进行连接和操作: 1. 创建一个ADODB.Connection对象,并设置连接字符串,指定SQL Server数据库的服务器名称、数据库名称、用户名和密码(如果需要)。 2. 使用Open方法打开数据库连接。 3. 创建一个ADODB.Recordset对象,并使用SQL查询语句执行数据库操作(如查询、插入、更新等)。 4. 使用Recordset对象的方法和属性来处理返回的数据或执行其他操作。 5. 最后,使用Close方法关闭数据库连接。 以下是一个简单的示例代码,演示了如何使用VBA连接SQL Server数据库并执行查询操作: ```vba Sub ConnectToSQLServer() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim strSQL As String ' 创建连接对象 Set conn = New ADODB.Connection ' 设置连接字符串 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=服务器名称;Initial Catalog=数据库名称;User ID=用户名;Password=密码;" ' 打开数据库连接 conn.Open ' 创建记录集对象 Set rs = New ADODB.Recordset ' 执行查询语句 strSQL = "SELECT * FROM 表名" rs.Open strSQL, conn ' 处理返回的数据 Do Until rs.EOF ' 读取数据 MsgBox rs.Fields("字段名").Value ' 移动到下一条记录 rs.MoveNext Loop ' 关闭记录集和连接 rs.Close conn.Close ' 释放对象 Set rs = Nothing Set conn = Nothing End Sub ``` 请注意,上述示例中的连接字符串需要根据实际情况进行修改,包括服务器名称、数据库名称、用户名和密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值