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