SQL Server中插入中文变成(问号)(乱码)

英文版的SQL Server中直接在SQL语句中插入中文最终会显示??

单次解决方案

把类似于

insert into example values ('您好')

这样的SQL语句全部改写成

insert into example values (N'您好')

N表示Unicode,上面的语法仅为示例,具体怎么写看自己习惯。

还有,如果数据库的字段类型不是nchar或者nvarchar的话貌似也是不能插中文,请注意。

参考:解决在英文版MSSQL中插入中文乱码的问题


永久解决方案

本人将【排序规则】改为简体中文后问题没得到解决,将【默认语言】改为简体中文后问题得到解决,有可能是两个均改才可以,也有可能是只将【默认语言】修改就可以,我懒得去调试了,请读者自选。

修改数据库的排序规则

  1. 将数据库修改为单用户模式,注意修改代码中【数据库名】片段

    SQL ALTER DATABASE <你的数据库名> SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
  2. 关闭所有的查询窗口,修改排序规则为Chinese_PRC_90_CI_AS ,其他类似的很多也是中文,但在细节上有所不同,详情查看SQL Server 排序规则名称 (Transact-SQL)

    请添加图片描述

  3. 修改为多用户模式

    SQL ALTER DATABASE <你的数据库名> SET MULTI_USER
    

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


更改SQL Server的默认语言

查看SQL Server和数据库的默认语言

SQL Server在属性—高级里

请添加图片描述

数据库在属性—选项里

请添加图片描述

使用SELECT @@language 可查询到当前默认语言

请添加图片描述

使用Transact-SQL配置默认语言选项

在新建查询中输入以下内容,然后单击执行

USE <你的数据库名> ;
GO
EXEC sp_configure 'default language', 30;
GO
RECONFIGURE;
GO

数字与语言参照表

╔════════╦═════════════════════╗
║ LANGID ║        ALIAS        ║
╠════════╬═════════════════════╣
║      0 ║ English             ║
║      1 ║ German              ║
║      2 ║ French              ║
║      3 ║ Japanese            ║
║      4 ║ Danish              ║
║      5 ║ Spanish             ║
║      6 ║ Italian             ║
║      7 ║ Dutch               ║
║      8 ║ Norwegian           ║
║      9 ║ Portuguese          ║
║     10 ║ Finnish             ║
║     11 ║ Swedish             ║
║     12 ║ Czech               ║
║     13 ║ Hungarian           ║
║     14 ║ Polish              ║
║     15 ║ Romanian            ║
║     16 ║ Croatian            ║
║     17 ║ Slovak              ║
║     18 ║ Slovenian           ║
║     19 ║ Greek               ║
║     20 ║ Bulgarian           ║
║     21 ║ Russian             ║
║     22 ║ Turkish             ║
║     23 ║ British English     ║
║     24 ║ Estonian            ║
║     25 ║ Latvian             ║
║     26 ║ Lithuanian          ║
║     27 ║ Brazilian           ║
║     28 ║ Traditional Chinese ║
║     29 ║ Korean              ║
║     30 ║ Simplified Chinese  ║
║     31 ║ Arabic              ║
║     32 ║ Thai                ║
║     33 ║ Bokmål              ║
╚════════╩═════════════════════╝

然后能发现SQL Server及数据库的默认语言都变成了Simplified Chinese,但在表中添加的中文仍为??

这是为什么?

我猜是因为表在建立的时候是按数据库的的默认语言来建立的,所以表要重建才能支持中文。

参考:如何更改SQL Server的默认语言?(How to change default languag


采用以下方法可以更快重建表:

将编写脚脚本CREATE到新查询编辑器窗口

请添加图片描述

然后将原来的表删除,再执行该查询语句实现对表的重建

请添加图片描述

发现新表可以支持中文了!✨ノ(≧∇≦)ノ✨

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值