【Docker】SQL SERVER导入中文乱码问题解决
liuian 2025-08-06 21:03 4 浏览
公司最近承接了一个项目,甲方现使用旧版SiteServer框架(以下简称“SiteCMS”)作为门户网站,使用的数据源是SQL Server。
现在需要对SiteCMS进行升级,在升级时数据库和数据库结构也需要同时更新,其中数据库要求从现在Windows Server服务器的SQL SERVER迁移到CentOS的Docker版SQL SERVER中以便可以Docker化统一管理(这个别人家的管理模式就不作深究了)。
为了确保工作万无一失,需要将数据备份还原到本地环境进行预演(已经过用户授权)。但是导入到测试环境时却出现中文乱码的情况。如下图所示:
本地环境模拟的镜像是“
mcr.microsoft.com/mssql/server:2017-latest”,这个镜像也将会在后面生产环境下使用。
先查询一下当前数据库的默认编码,如下图:
干过开发的都知道这个Latin1编码方式就是中文乱码的主要原因了。好了,现在问题也清晰了,就一句话“要怎样才能够在没有SQL SERVER管理器(Mac环境)的情况下修改Docker版SQL SERVER的编码规则呢?”,下面将详细讲讲这些走过的“弯路”。
按照网上的说法,首先先进入容器并切换到/opt/mssql/bin目录,如下所示:
yuanzhenhui@MacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ce7e5e399ba 314918ddaedf "/opt/mssql/bin/sqls…" 8 months ago Up 12 hours 0.0.0.0:1433->1433/tcp mssql
yuanzhenhui@MacBook-Pro ~ % docker exec -it 6ce7e5e399ba bash
root@6ce7e5e399ba:/# cd /opt/mssql/bin
root@6ce7e5e399ba:/opt/mssql/bin# ls
compress-dump.sh crash-support-functions.sh generate-sql-dump.sh handle-crash.sh mssql-conf paldumper sqlservr
root@6ce7e5e399ba:/opt/mssql/bin# ls -al
total 32280
drwxrwxr-x 2 root root 4096 Dec 17 2018 .
drwxrwxr-x 4 root root 4096 Dec 17 2018 ..
-rwxrwxr-x 1 root root 409 Dec 17 2018 compress-dump.sh
-rwxrwxr-x 1 root root 16447 Dec 17 2018 crash-support-functions.sh
-rwxrwxr-x 1 root root 1615 Dec 17 2018 generate-sql-dump.sh
-rwxrwxr-x 1 root root 1886 Dec 17 2018 handle-crash.sh
-rwxrwxr-x 1 root root 1294 Dec 17 2018 mssql-conf
-rwxrwxr-x 1 root root 31384736 Dec 17 2018 paldumper
-rwxrwxr-x 1 root root 1618456 Dec 17 2018 sqlservr
root@6ce7e5e399ba:
在该目录下有一个mssql-conf的可执行文件,然后通过“./mssql-conf set-collation”指令就能够设置你需要的编码,如下所示:
root@6ce7e5e399ba:/opt/mssql/bin# ./mssql-conf set-collation
Enter the collation: Chinese_PRC_CI_AS
Configuring SQL Server...
/opt/mssql/lib/mssql-conf/invokesqlservr.sh: line 13: sudo: command not found
root@6ce7e5e399ba:/opt/mssql/bin#
(⊙o⊙)…这里说我没有sudo执行不了?好吧,那就装个sudo吧。还好镜像是用Ubuntu操作系统为基础的,用apt-get就能够轻松安装。如下所示:
root@6ce7e5e399ba:/opt/mssql/bin# apt-get update
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [99.8 kB]
Get:3 https://packages.microsoft.com/ubuntu/16.04/prod xenial InRelease [4010 B]
Get:4 https://packages.microsoft.com/ubuntu/16.04/prod xenial/main amd64 Packages [323 kB]
Get:5 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [256 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [99.8 kB]
Get:7 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [97.4 kB]
Get:8 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]
Get:9 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [2051 kB]
Get:10 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [15.9 kB]
Get:11 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [984 kB]
Get:12 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [8820 B]
Get:13 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [548 kB]
Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [2560 kB]
Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [16.4 kB]
Get:20 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [1544 kB]
Get:21 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [26.2 kB]
Get:22 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [10.9 kB]
Get:23 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [12.7 kB]
Fetched 30.3 MB in 33s (908 kB/s)
Reading package lists... Done
root@6ce7e5e399ba:/opt/mssql/bin# apt-get install sudo
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
sudo
0 upgraded, 1 newly installed, 0 to remove and 96 not upgraded.
Need to get 390 kB of archives.
After this operation, 1626 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 sudo amd64 1.8.16-0ubuntu1.10 [390 kB]
Fetched 390 kB in 1s (225 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package sudo.
(Reading database ... 8900 files and directories currently installed.)
Preparing to unpack .../sudo_1.8.16-0ubuntu1.10_amd64.deb ...
Unpacking sudo (1.8.16-0ubuntu1.10) ...
Setting up sudo (1.8.16-0ubuntu1.10) ...
root@6ce7e5e399ba:/opt/mssql/bin#
然后就又出现了另一个问题,如下图:
root@ff6113eba616:/opt/mssql/bin#sudo ./mssql-conf set-collation
Enter the collation: Chinese_PRC_CI_AS
Configuring SQL Server...
No passwd entry for user 'mssql'
root@ff6113eba616:
mssql用户没有密码?按照这个提示又去网上找了一圈,下面就按照Stack Overflow里面的解答来进行了操作,如下所示:
root@a4b1b86ad87c:/# useradd mssql
root@a4b1b86ad87c:/# mkdir -p /var/opt/mssql
root@a4b1b86ad87c:/# chmod -R 777 /var/opt/mssql
root@a4b1b86ad87c:/opt/mssql/bin# echo "Chinese_PRC_CI_AS" | /opt/mssql/bin/mssql-conf set-collation
Enter the collation: Configuring SQL Server...
2022-11-22 05:35:39.66 Server Microsoft SQL Server 2017 (RTM-CU31) (KB5016884) - 14.0.3456.2 (X64)
Sep 2 2022 11:01:50
Copyright (C) 2017 Microsoft Corporation
Enterprise Edition (64-bit) on Linux (Ubuntu 18.04.6 LTS)
2022-11-22 05:35:39.68 Server UTC adjustment: 0:00
2022-11-22 05:35:39.68 Server (c) Microsoft Corporation.
2022-11-22 05:35:39.68 Server All rights reserved.
2022-11-22 05:35:39.69 Server Server process ID is 392.
2022-11-22 05:35:39.69 Server Logging SQL Server messages in file '/var/opt/mssql/log/errorlog'.
2022-11-22 05:35:39.70 Server Registry startup parameters:
-d /var/opt/mssql/data/master.mdf
-l /var/opt/mssql/data/mastlog.ldf
-e /var/opt/mssql/log/errorlog
2022-11-22 05:35:39.71 Server Command Line Startup Parameters:
-q "Chinese_PRC_CI_AS"
2022-11-22 05:35:39.71 Server Error: 17113, Severity: 16, State: 1.
2022-11-22 05:35:39.71 Server Error 5(Access is denied.) occurred while opening file '/var/opt/mssql/data/master.mdf' to obtain configuration information at startup. An invalid startup option might have caused the error. Verify your startup options, and correct or remove them if necessary.
呃...master.mdf文件没有访问权限?已经执行了chmod -R 777的情况下居然没有权限?到了这一步实在没有办法,既然这样就回归本源不搞全局算了。
接着我这边就删除了容器并重新运行,先创建一个名为SiteCMS的数据库,接着直接对数据库进行编码的设定,如下图:
再之后重新导入数据
导入数据之后一切正常,ε=('ο`*)))唉早知道就不折腾了。
相关推荐
- 总结下SpringData JPA 的常用语法
-
SpringDataJPA常用有两种写法,一个是用Jpa自带方法进行CRUD,适合简单查询场景、例如查询全部数据、根据某个字段查询,根据某字段排序等等。另一种是使用注解方式,@Query、@Modi...
- 解决JPA在多线程中事务无法生效的问题
-
在使用SpringBoot2.x和JPA的过程中,如果在多线程环境下发现查询方法(如@Query或findAll)以及事务(如@Transactional)无法生效,通常是由于S...
- PostgreSQL系列(一):数据类型和基本类型转换
-
自从厂子里出来后,数据库的主力就从Oracle变成MySQL了。有一说一哈,贵确实是有贵的道理,不是开源能比的。后面的工作里面基本上就是主MySQL,辅MongoDB、ES等NoSQL。最近想写一点跟...
- 基于MCP实现text2sql
-
目的:基于MCP实现text2sql能力参考:https://blog.csdn.net/hacker_Lees/article/details/146426392服务端#选用开源的MySQLMCP...
- ORACLE 错误代码及解决办法
-
ORA-00001:违反唯一约束条件(.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。ORA-00017:请求会话以设置跟踪事件ORA-00018:超出最大会话数ORA-00...
- 从 SQLite 到 DuckDB:查询快 5 倍,存储减少 80%
-
作者丨Trace译者丨明知山策划丨李冬梅Trace从一开始就使用SQLite将所有数据存储在用户设备上。这是一个非常不错的选择——SQLite高度可靠,并且多种编程语言都提供了广泛支持...
- 010:通过 MCP PostgreSQL 安全访问数据
-
项目简介提供对PostgreSQL数据库的只读访问功能。该服务器允许大型语言模型(LLMs)检查数据库的模式结构,并执行只读查询操作。核心功能提供对PostgreSQL数据库的只读访问允许L...
- 发现了一个好用且免费的SQL数据库工具(DBeaver)
-
缘起最近Ai不是大火么,想着自己也弄一些开源的框架来捣腾一下。手上用着Mac,但Mac都没有显卡的,对于学习Ai训练模型不方便,所以最近新购入了一台4090的拯救者,打算用来好好学习一下Ai(呸,以上...
- 微软发布.NET 10首个预览版:JIT编译器再进化、跨平台开发更流畅
-
IT之家2月26日消息,微软.NET团队昨日(2月25日)发布博文,宣布推出.NET10首个预览版更新,重点改进.NETRuntime、SDK、libraries、C#、AS...
- 数据库管理工具Navicat Premium最新版发布啦
-
管理多个数据库要么需要使用多个客户端应用程序,要么找到一个可以容纳你使用的所有数据库的应用程序。其中一个工具是NavicatPremium。它不仅支持大多数主要的数据库管理系统(DBMS),而且它...
- 50+AI新品齐发,微软Build放大招:拥抱Agent胜算几何?
-
北京时间5月20日凌晨,如果你打开微软Build2025开发者大会的直播,最先吸引你的可能不是一场原本属于AI和开发者的技术盛会,而是开场不久后的尴尬一幕:一边是几位微软员工在台下大...
- 揭秘:一条SQL语句的执行过程是怎么样的?
-
数据库系统能够接受SQL语句,并返回数据查询的结果,或者对数据库中的数据进行修改,可以说几乎每个程序员都使用过它。而MySQL又是目前使用最广泛的数据库。所以,解析一下MySQL编译并执行...
- 各家sql工具,都闹过哪些乐子?
-
相信这些sql工具,大家都不陌生吧,它们在业内绝对算得上第一梯队的产品了,但是你知道,他们都闹过什么乐子吗?首先登场的是Navicat,这款强大的数据库管理工具,曾经让一位程序员朋友“火”了一把。Na...
- 详解PG数据库管理工具--pgadmin工具、安装部署及相关功能
-
概述今天主要介绍一下PG数据库管理工具--pgadmin,一起来看看吧~一、介绍pgAdmin4是一款为PostgreSQL设计的可靠和全面的数据库设计和管理软件,它允许连接到特定的数据库,创建表和...
- Enpass for Mac(跨平台密码管理软件)
-
还在寻找密码管理软件吗?密码管理软件有很多,但是综合素质相当优秀且完全免费的密码管理软件却并不常见,EnpassMac版是一款免费跨平台密码管理软件,可以通过这款软件高效安全的保护密码文件,而且可以...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)