SqlServer 插入遇到乱码
原因:
在英文系统中,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
采用图形界面创建数据库,则在添加时修改为指定排序规则
如果数据库与表已经创建好了,发现是乱码,可以先导出库表结构脚本,手动在建库脚本的最后加入collate Chinese_PRC_CI_AS
再执行脚本即可