最近在公司弄了个小程序,随便架了个sqlserver,再看微软官网的时候发现可以在docker下安装sqlserver,随便实践记录下
先上微软的连接地址
Docker:为 Linux 上的 SQL Server 安装容器 - SQL Server | Microsoft Learn
这个是sqlserver2017的,其他版本也是类似的,其实都是微软docker了一个linux,再在里面安装了sqlserver
下载安装过程
1、从 Microsoft 容器注册表中请求 SQL Server 2017 (14.x) Linux 容器映像。
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
注:也可以指定版本,进下面地址查看
2、要使用 Docker 运行 Linux 容器映像,可以从 Bash Shell 命令提示符使用以下命令。
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Wind@147258" \
-p 1433:1433 --name sqlserver2017 --hostname sqlserver2017 \
-d \
mcr.microsoft.com/mssql/server:2017-latest
密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。
默认情况下,会创建一个使用 SQL Server 开发人员版的容器。使用以上的参数,安装的版本是排序规则是Latin1_General_100_CI_AS_SC、语言是Englisg
如果,原先数据不是使用的这个排序,或在新建数据库下,在数据库表中新增中文会乱码,所以需求是要指定排序规则,并指定数据库的文件放在当前的ubuntu下的指定目录(这样有一个非常大大好处,即使删除了sqlserver的docker,但数据库文件不会删除),综合以上,所以要再加参数,完整如下
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Wind@147258" \
-e "MSSQL_COLLATION=Chinese_PRC_CI_AS" -e "MSSQL_LCID=2052" \
-p 1433:1433 --name sqlserver2017 --hostname sqlserver2017 \
-v sqlserver2017test:/var/opt/ \
-v /var/opt/mssql2017:/var/opt/mssql --restart=always \
-d mcr.microsoft.com/mssql/server:2017-latest
上面我是指定了SQL Server 排序规则为Chinese_PRC_CI_AS(即中文,其他排序规则往下翻), SQL Server 的语言 ID为2052(即中文,其他语言往下翻,这个根据自己需求设定),创建了数据卷sqlserver2017test,并设置了与真实系统目录的映射。
下表对前一个 docker run 示例中的参数进行了说明:
参数 | 说明 |
-e "ACCEPT_EULA=Y" | 将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。 |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" | 指定至少包含 8 个字符且符合 SQL Server 密码要求的强密码。 SQL Server 映像的必需设置。 |
-e "MSSQL_COLLATION=<SQL_Server_collation>" | 指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS。 |
-p 1433:1433 | 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。 |
--name sql1 | 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。 |
--hostname sql1 | 用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。 |
-d | 在后台运行容器(守护程序)。 |
mcr.microsoft.com/mssql/server:2017-latest | SQL Server Linux 容器映像。 |
-v sqlserver2017:/var/opt/ -v /var/opt/mssql2017:/var/opt/mssql | 设置创建的docke的数据卷名称为sqlserver2017data 映射当前系统的指定目录/var/opt/mssql2017与数据卷sqlserver2017data里的/var/opt/mssql(这个是sqlserver的数据存储的目录,不可修改) |
--restart=always | 重启后自动启动 |
SQL Server 排序规则地址
默认服务器排序规则是在 SQL Server 安装过程中设置的,它将成为系统数据库和所有用户数据库的默认排序规则。
下表显示由操作系统 (OS) 区域设置确定的默认排序规则标识,其中包括它们的 Windows 和 SQL 语言代码标识符 (LCID):
(我复制了部分,完整的排序规则见下面网页排序规则和 Unicode 支持 - SQL Server | Microsoft Learn)
Windows 区域设置 | Windows LCID | SQL LCID | 默认排序规则 |
加泰罗尼亚语(加泰罗尼亚) | 0x0403 | 0x0409 | Latin1_General_CI_AS |
中文(香港特别行政区) | 0x0c04 | 0x0404 | Chinese_Taiwan_Stroke_CI_AS |
中文(澳门特别行政区) | 0x1404 | 0x1404 | Latin1_General_CI_AI |
中文(澳门特别行政区) | 0x21404 | 0x21404 | Latin1_General_CI_AI |
中文(中华人民共和国) | 0x0804 | 0x0804 | Chinese_PRC_CI_AS |
中文(中华人民共和国) | 0x20804 | 0x20804 | Chinese_PRC_Stroke_CI_AS |
中文(新加坡) | 0x1004 | 0x0804 | Chinese_PRC_CI_AS |
中文(新加坡) | 0x21004 | 0x20804 | Chinese_PRC_Stroke_CI_AS |
中文(台湾) | 0x30404 | 0x30404 | Chinese_Taiwan_Bopomofo_CI_AS |
中文(台湾) | 0x0404 | 0x0404 | Chinese_Taiwan_Stroke_CI_AS |
科西嘉语(法国) | 0x0483 | 0x0483 | Latin1_General_CI_AI |
克罗地亚语(波斯尼亚和黑塞哥维那,拉丁语) | 0x101a | 0x041a | Croatian_CI_AS |
克罗地亚语(克罗地亚) | 0x041a | 0x041a | Croatian_CI_AS |
捷克语(捷克共和国) | 0x0405 | 0x0405 | Czech_CI_AS |
英语(菲律宾) | 0x3409 | 0x0409 | Latin1_General_CI_AS |
英语(新加坡) | 0x4809 | 0x0409 | Latin1_General_CI_AS |
英语(南非) | 0x1c09 | 0x0409 | Latin1_General_CI_AS |
英语(特立尼达和多巴哥) | 0x2c09 | 0x0409 | Latin1_General_CI_AS |
英语(英国) | 0x0809 | 0x0409 | Latin1_General_CI_AS |
英语(美国) | 0x0409 | 0x0409 | SQL_Latin1_General_CP1_CI_AS |
SQL Server 的语言 ID
sys.syslanguages (Transact-SQL) - SQL Server | Microsoft Learn
数据库引擎包含下列已安装的语言。
用英语表示的名称 | Windows LCID | 数据库引擎消息组 ID |
英语 | 2052 | 2052 |
德语 | 1031 | 1031 |
法语 | 1036 | 1036 |
日语 | 1041 | 1041 |
丹麦语 | 1030 | 1030 |
西班牙语 | 3082 | 3082 |
意大利语 | 1040 | 1040 |
荷兰语 | 1043 | 1043 |
挪威语 | 2068 | 2068 |
葡萄牙语 | 2070 | 2070 |
芬兰语 | 1035 | 1035 |
瑞典语 | 1053 | 1053 |
捷克语 | 1029 | 1029 |
匈牙利语 | 1038 | 1038 |
波兰语 | 1045 | 1045 |
罗马尼亚语 | 1048 | 1048 |
克罗地亚语 | 1050 | 1050 |
斯洛伐克语 | 1051 | 1051 |
斯洛文尼亚语 | 1060 | 1060 |
希腊语 | 1032 | 1032 |
保加利亚语 | 1026 | 1026 |
俄语 | 1049 | 1049 |
土耳其语 | 1055 | 1055 |
英语(英国) | 2057 | 2052 |
爱沙尼亚语 | 1061 | 1061 |
拉脱维亚语 | 1062 | 1062 |
立陶宛语 | 1063 | 1063 |
葡萄牙语(巴西) | 1046 | 1046 |
繁体中文 | 1028 | 1028 |
韩语 | 1042 | 1042 |
简体中文 | 2052 | 2052 |
阿拉伯语 | 1025 | 1025 |
泰语 | 1054 | 1054 |