linux/docker 版 Sql Server新建的数据库插入中文乱码问题解决方案

发布时间 2023-11-09 10:44:29作者: 五官一体即忢

SqlServer 插入遇到乱码

image.png

原因:在英文系统中,SqlServer默认排序规则为英文字典顺序

解决方案一:容器版 Sql Server ,在创建容器时,可以加上环境变量-e MSSQL_COLLATION=Chinese_PRC_CI_AS -e TZ=Asia/Shanghai 把排序规则设为中文字典顺序并忽略大小写区分重音,时区设置为上海,不然getdate()会比北京时间晚 8 小时。
容器已经创建的,可以把删除容器再重新创建,数据不会丢。 已经 创建的数据库,可以手动修改排序规则或导出脚本批量修改后再导入

解决方案二:可以在创建数据库的时候指定排序规则

采用命令创建数据库,则在日志文件后面加上collate Chinese_PRC_CI_AS

CREATE DATABASE [IStrong_Gxfwb]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'IStrong_Gxfwb', FILENAME = N'/var/opt/mssql/data/IStrong_Gxfwb.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'IStrong_Gxfwb_log', FILENAME = N'/var/opt/mssql/data/IStrong_Gxfwb_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
collate Chinese_PRC_CI_AS
GO

 


采用图形界面创建数据库,则在添加时修改为指定排序规则

image.png

如果数据库与表已经创建好了,发现是乱码,可以先导出库表结构脚本,手动在建库脚本的最后加入collate Chinese_PRC_CI_AS再执行脚本即可