vs自带数据库sql server的中文插入乱码问题、查找当前数据库名

解决两个问题:vs自带数据库sql server的中文插入乱码问题、查找当前数据库名

(查找数据库名在文章中间,自己往下翻吧,不单拎出来了)

vs自带数据库sql server的中文插入乱码问题:

如图所示,我插入表的中文变成了问号

vs自带数据库sql server的中文插入乱码问题、查找当前数据库名_第1张图片

解决思路:

1、是我的表建立时字段类型不支持中文?

2、数据库的排序规则错误?

3、写入数据库时的数据编码问题?

第一种情况:把nchar改成nvarchar即可

我试了一下,在表格内输入中文字符能显示,且能按中文正常读取,我的问题不属于第一种,排除

第二种情况:数据库的排序错误

我去度娘一下,需要修改编码格式

百度经验的文章教了该怎么做:

https://jingyan.baidu.com/article/c74d600060804a0f6a595dfd.html

然而我更改时发现我的数据库名错误,并且属性里也没有排序规则这项,如图

vs自带数据库sql server的中文插入乱码问题、查找当前数据库名_第2张图片

那我现在是什么格式呢,先提供两种  不适用于  我的状况的方法:

----------------------------------------------------------------------------------------------------------------------------------------

数据库上右键,新建查询

vs自带数据库sql server的中文插入乱码问题、查找当前数据库名_第3张图片

1、

SELECT SERVERPROPERTY('Collation') 
//用来得知正在运行的SQL Server实例的服务器排序规则

结果如下:

vs自带数据库sql server的中文插入乱码问题、查找当前数据库名_第4张图片

2、

SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')
//以中文显示当前数据库编码方式
//936 简体中文GBK
//950 繁体中文BIG5
//437 美国/加拿大英语
//932 日文
//949 韩文
//866 俄文
//65001 unicode UFT-8

结果:

vs自带数据库sql server的中文插入乱码问题、查找当前数据库名_第5张图片

为什么不适用呢,是因为这两种方法查询的都是当前数据库,而我用的是vs自带的数据库,查询出来的却不是我自己建的那个,而是更上层的数据库。

所以这两种方法有用,但不试用于我的情况

--------------------------------------------------------------------------------------------------------------------------------------

我用如下代码:

Select * from sys.databases
//列出SQL Server中的所有数据库

结果

vs自带数据库sql server的中文插入乱码问题、查找当前数据库名_第6张图片

根据日期,我找到第六项,也就是那一长串,是我的数据库名,很奇怪他为什么那么长,因为我建的时候什么都没设置,就选了个路径就保存了,应该是直接把路径设做了数据库名

根据结果的collation_name可以看出数据库的编码格式,是为SQL_Latin1_General_CP1_CI_AS,显然不支持中文写入

需要将其更改为 Chinese_PRC_CI_AS

更改的代码:

alter database[你的数据库名] collate Chinese_PRC_CI_AS;

如果提示错误告诉你 混合用户不能更改编码

需要先改为单用户,更改为collate Chinese_PRC_CI_AS后再改成混合用户

代码如下:

alter database[你的数据库名] set single_user with rollback immediate;
go
alter database[你的数据库名] collate Chinese_PRC_CI_AS;
go
alter database[你的数据库名] set multi_user;
go

这回你再用刚才的Select * from sys.databases查看你的编码是否正确;并且表里也能看出当前是混合用户还是单用户以及其他信息

这回在重新写入中文字符到数据库就发现没问题了

vs自带数据库sql server的中文插入乱码问题、查找当前数据库名_第7张图片

完成。

 

额外的内容:

我的问题在解决思路的第二步就完成了

对于第三步的情况,据网上说在连接数据库时在url后加上 ?characterEncoding = utf-8 即可

比如:

jdbc:mysql://localhost:3306/test?characterEncoding=utf8

一看就知道是java的,不适用于sqlsrever,会报错显示

“/”应用程序中的服务器错误。不支持关键字: “characterencoding”。

但是我觉的思路是对的,可以理解为

存数据时,先用UTF-8格式将数据解码成字节码,再将解码后的字节码重新使用数据库的编码存放到数据库中

取数据时,先将数据按数据库编码格式解码成字节码,再将解码后的字节码按UTF-8格式编码数据读出来

sql server我了解的少,不知道怎么在连接时设置写入编码,并且问题已经解决了就没有去试。

 

如果以上三种方法还不对,可以看看你的区域语言是否为简体中文

或者干脆去微软文档找方法:

https://docs.microsoft.com/zh-cn/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-2017

这是sqlserver2017排序规则和 Unicode 支持,选择你需要的内容查看

你可能感兴趣的:(aspnet设计网站时的问题)