Docker部署MSSQL时设置MSSQL_COLLATION不生效如何处理
问题原因
核心原因是 MSSQL_COLLATION 环境变量仅在容器首次启动、初始化系统数据库的阶段生效。你当前挂载的本地数据目录 C:/Users/User1/sql-server/data 中已经存在之前初始化生成的系统库文件,后续重启容器时不会重新执行初始化流程,因此新设置的排序规则无法覆盖原有默认值。
解决方案
你可以根据自身数据情况选择以下两种方案处理:
方案1:无重要数据可清空挂载目录时使用
- 先停止并删除当前运行的SQL Server容器:
docker stop <你的容器ID或容器名称> && docker rm <你的容器ID或容器名称>
- 清空本地挂载目录
C:/Users/User1/sql-server/data下的所有文件(操作前请确认无需要保留的数据) - 重新执行你原来的容器创建命令即可,本次初始化系统库会读取你设置的
MSSQL_COLLATION参数,排序规则会正常生效。
方案2:挂载目录已有重要数据不可清空时使用
需要手动进入容器修改服务器排序规则:
- 进入运行中的容器终端:
docker exec -it <你的容器ID或容器名称> /bin/bash
- 停止容器内的SQL Server服务:
/opt/mssql/bin/mssql-conf stop
- 执行排序规则修改命令:
/opt/mssql/bin/mssql-conf set-collation Polish_CI_AS
- 按照终端提示输入sa账号的密码,等待修改完成后退出容器终端,重启容器:
docker restart <你的容器ID或容器名称>
- 重启完成后可执行以下SQL语句验证排序规则是否生效:
SELECT SERVERPROPERTY('Collation') AS ServerCollation;
如果返回结果为 Polish_CI_AS 则说明修改成功。
注意事项
- 所有修改操作前请务必完整备份所有数据库数据,避免操作异常导致数据丢失
- 服务器排序规则修改后,已创建的用户数据库、表字段的排序规则不会自动同步变更,如需统一规则需要单独执行对应修改语句
内容的提问来源于stack exchange,提问作者MaciekB
相关产品推荐
相关产品推荐

