如何解决MSSQL中文数据乱码问题


控制台插入数据

当用MSSQL控制台去插入或更改中文数据时,中文字符可能会被显示成问号(??),以下提供2种解决办法:

  • 在SQL里加上‘N’强制转换编码

    • 把所有字符字段都改成无符号类型,如:nchar,ntext,nvarchar
    • 用查询分析器进行数据管理,在中文数据前加N,强制转换编码,如:insert into test(name,address) values(N'技术',N'易网库')
  • 改数据库的排列规则(collation)

    • 执行下面sql语句改collation:
    • alter database 数据库名称 collate Chinese_PRC_CI_AS
    • 把所有字符字段都改成无符号类型,如:nchar,ntext,nvarchar

注意

  • 对已经乱码的数据,没有效果
  • 这只针对MSSQL控制台中文乱码的问题,若是网站乱码,得进一步检查文件存储编码和显示编码的设置。
  • 执行下面的sql语句,可以查看当前数据库的排列规则: SELECT DATABASEPROPERTYEX('数据库名称', 'Collation') SQLCollation;

修改 Collocation

The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)

SQL Server 5030错误解决办法

今天在使用SQL Server时,由于之前创建数据库忘记了设置Collocation,数据库中插入中文字符都是乱码,于是到DataBase的Options中修改Collocation,出现了The database could not be exclusively locked to perform the operation这个错误,无法修改字符集为Chinese_PRC_90_CI_AS。

解决办法找了很久才找到,如下:

  • 执行 SQL ALTER DATABASE db_database SET SINGLE_USER WITH ROLLBACK IMMEDIATE 修改为单用户模式

  • 然后关闭所有的查询窗口,修改 OptionsCollocation 属性为 Chinese_PRC_90_CI_AS

  • 执行 SQL ALTER DATABASE db_database SET MULTI_USER 再修改为多用户模式

中英文混合情况

今天在导数据时遇到几个问题,因为一个是英文操作系统,一个是中文操作系统,两个默认的不一样。我想现在就统一在数据库级别将中文的那个Collation 从 Chinese_PRC_CI_AS 改为 SQL_Latin1_General_CP1_CI_AS(英文系统默认)。

但当我运行:

ALTER DATABASE QinBide COLLATE SQL_Latin1_General_CP1_CI_AS

报出错误如下:

Msg 5030, Level 16, State 2, Line 1 
The database could not be exclusively locked to perform the operation. 
Msg 5072, Level 16, State 1, Line 1 
ALTER DATABASE failed. The default collation of database 'XXXX' cannot be set to Chinese_PRC_CI_AS.

所在环境:

OS:  Windows 7 Professional English X64

DB: Sql Server 2008 R2

解决办法:

ALTER DATABASE QinBide SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
go

ALTER DATABASE QinBide COLLATE SQL_Latin1_General_CP1_CI_AS

go

ALTER DATABASE QinBide SET MULTI_USER 
go 

知识共享许可协议
《如何解决MSSQL中文数据乱码问题》 常伟华 创作。
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议 | 3.0 中国大陆许可协议进行许可。

站内公告