Datagrip連線SQLserver表中出現中文亂碼解決方案

Vesper_53263發表於2020-12-08

Datagrip版本: 2020.3
Sqlserver版本: 2019 for docker

從網上搜尋了很多方案都說是Datagrip顯示字型的問題,結果更改後發現並不能解決問題,於是嘗試將表中列的資料型別由 char、varchar 切換為 nvarchar , 在執行 insert into 語句時在資料之前加上 N , 發現在檢視錶時中文就顯示正常了。
示例:

insert into student
values('200515004', N'張衡', N'男', 18, 'IS');

那到底為什麼會中文亂碼呢?
究其原因,是因為在建立 SQLserver 資料庫時未指定排序字符集,Databases則會使用instances的排序規則.
為了支援中文,需要設定成Chinese_PRC_CI_AS.

使用SQL語句實現:

ALTER DATABASE 資料庫名 COLLATE Chinese_PRC_CI_AS

若出現操作報錯的情況,則是因為出現資料庫被其他使用者連線使用時,出現排他鎖的錯誤。此時用SQL語句修改資料庫為單使用者模式——改排序規則——再修改回多使用者。

由於之前建立資料庫忘記了設定Collocation,資料庫中插入中文字元都是亂碼,於是到DataBase的Options中修改Collocation,出現了 The database could not be exclusively locked to perform the operation 這個錯誤,無法修改字符集為Chinese_PRC_90_CI_AS.

解決方案:

①修改為單使用者模式

 ALTER DATABASE 資料庫名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE

②修改資料庫字符集

ALTER DATABASE 資料庫名 COLLATE Chinese_PRC_90_CI_AS

③修改為多使用者模式

ALTER DATABASE 資料庫名 SET MULTI_USER

相關文章