Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理
  130 随笔 :: 0 文章 :: 30 评论 :: 30万 阅读

SQL语句insert数据进去,却发现所有的中文都变成了"????",只能在字符串前带上N

例如:INSERT INTO dbo.[WorkData] ([A001] ,[A002] ) VALUES('1705150001',N'中文字')

但是这有个问题就是,不只是insert,就连update跟select内的where若要查询中文字都要加上N才能够正常使用....

经查,原因为数据库字符排序默认问题(默认为SQL_Latin1_General_CP1_CI_AS)

需手工设置为正确的选项(Chinese_PRC_CS_AS)

或者运行如下脚本:

复制代码
declare @database nvarchar(100)
declare tmpCur cursor for
select DB_NAME()
open tmpCur
fetch next from tmpCur into @database
declare @sql nvarchar(500)
select @sql='alter database ['+@database+'] set single_user with rollback immediate'
exec(@sql)
select @sql= 'alter database ['+@database+'] collate Chinese_PRC_CI_AS'
exec(@sql)
select @sql= 'alter database ['+@database+'] set multi_user'
exec(@sql)
close tmpCur
deallocate tmpCur
复制代码

如下示例:

--出现了The database could not be exclusively locked to perform the operation这个错误,
--无法修改字符集为Chinese_PRC_CI_AS;所以需要先设置为单用户模式
ALTER DATABASE LOGINDEMODB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE LOGINDEMODB COLLATE Chinese_PRC_CI_AS;;
ALTER DATABASE LOGINDEMODB SET MULTI_USER;

另外:还需要考虑数据库表名是否区分大小写问题:

下面语句是设置SQL Server数据库是否区分大小写:(表名和数据库字段名)
--修改数据库不区分大小写
alter database 数据库名称 COLLATE Chinese_PRC_CI_AS
如:alter database VueShopDB COLLATE Chinese_PRC_CI_AS
--修改数据库区分大小写
alter database 数据库名称  COLLATE  Chinese_PRC_CS_AS
如:alter database VueShopDB COLLATE Chinese_PRC_CS_AS

posted on   Chr☆s  阅读(877)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示