前言
SQL Server可以裝到Linux下啦~但是網(wǎng)上的資料還是很少,并且emmmm,中文的資料的質(zhì)量普遍偏低。這里把坑跟大家分享一下。
安裝流程
安裝還是比較簡(jiǎn)單的,這里是中文的官方文檔,可以根據(jù)自己的發(fā)行版來查看。
以Centos為例。
安裝步驟如下:
sudo yum update mssql-server
export MSSQL_COLLATION='Chinese_PRC_CI_AS'
export MSSQL_LCID='2052'
/opt/mssql/bin/mssql-conf setup
// 然后選擇版本(免費(fèi)的推薦選擇Developer)設(shè)置密碼即可。
這里的兩句export增加的環(huán)境變量,是為了添加MSSQL的中文支持,否則安裝好后再去添加會(huì)十分困難。
然后在建議安裝mssql-tools,安裝過程,請(qǐng)參考官方文檔,不要去百度了。很簡(jiǎn)單的。
坑1:This program requires a machine with at least 2000 megabytes of memory.
這個(gè)是說要求你的機(jī)器要有2G以上的可用空間。對(duì)于很多學(xué)生黨來說,1核2G的云服務(wù)器剛好不夠,但是還是想裝MSSQL,這時(shí)就要對(duì)sqlservr該可執(zhí)行程序做一點(diǎn)小小的修改來繞過限制了。
這個(gè)網(wǎng)上可以搜到大片的教程,然而!然而!如果是最新版2017的話,全部不可用。
大部分的教程都是這么寫的
cd /opt/mssql/bin/ # 進(jìn)入目錄
mv sqlservr sqlservr.bak # 保存?zhèn)浞菸募?
python # 使用python修改內(nèi)存限制代碼
>>> oldfile = open("sqlservr.bak", "rb").read()
>>> newfile = oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
>>> open("sqlservr", "wb").write(newfile)
>>>exit()
即把sqlservr中16進(jìn)制數(shù)據(jù)00943577(小端存儲(chǔ),實(shí)際上是16進(jìn)制77359400,10進(jìn)制2000000000)即2GB更改為16進(jìn)制0080841e 512MB。

但是,新版的sqlservr你是找不到00943577這個(gè)數(shù)據(jù)的。新版的數(shù)據(jù)為FF933577(10進(jìn)制1999999999)。
所以你需要把上面的\x00\x94\x35\x77部分修改為\xff\x93\x35\77。是不是很坑,應(yīng)該就是官方故意的 hhhhh。讓小內(nèi)存就不要用了。
這里有改好的腳本
PS: 如果sqlservr 出現(xiàn)權(quán)限不足,可以看看是不是短了執(zhí)行權(quán)限,用chmod +x 試試。
接下來,硬核環(huán)節(jié)??勺孕新赃^,我會(huì)介紹,我是如何找到該數(shù)據(jù)的。
- 使用IDA打開sqlservr
- 搜索字符串This program requires a machine with at ....
-
定位到關(guān)鍵跳
上圖是出錯(cuò)后的部分??磍oc_BFED4的交叉引用,跳轉(zhuǎn)兩次。來到下圖。
對(duì)16進(jìn)制按h轉(zhuǎn)換為10進(jìn)制后。就可以看到關(guān)鍵部分了。然后可以使用010editor什么的來修改這個(gè)數(shù)值~
坑2 中文編碼問題
如果你在安裝之前,沒有設(shè)置兩個(gè)MSSQL_COLLATION和MSSQL_LCID的環(huán)境變量。默認(rèn)的就支持英語啦。中文會(huì)顯示成一堆問號(hào)。
若你已經(jīng)安裝完畢了,要想設(shè)置排序規(guī)則和區(qū)域設(shè)置為中文,我強(qiáng)烈建議卸載重裝的方法。
當(dāng)前數(shù)據(jù)庫(kù)的區(qū)域設(shè)置是否為中文,的查詢命令如下:
1> SELECT CONVERT(NVARCHAR(50),SERVERPROPERTY('Collation'));
2> GO
SQL_Latin1_General_CP1_CI_AS 為英文默認(rèn)。
Chinese_PRC_CI_AS 為中文。
卸載重裝法
注意,這里的卸載重裝,是會(huì)連同數(shù)據(jù)文件一同刪除的,否則是沒法更改的。
更多卸載幫助,參考官方文檔
Centos為例:
sudo systemctl stop mssql-server.service
sudo yum remove mssql-server
sudo rm -rf /var/opt/mssql/
然后再安裝我之前的安裝方法,配置環(huán)境變量后,進(jìn)行安裝。查看環(huán)境變量是否設(shè)置成功,可以使用
echo $MSSQL_COLLATION
修改法
請(qǐng)參考文章
配置SQL Server on Linux(1)
更改 SQL Server 區(qū)域設(shè)置
更改 SQL Server 排序規(guī)則
其實(shí)就是修改區(qū)域設(shè)置以及排序規(guī)則。
最為復(fù)雜的是修改區(qū)域設(shè)置,需要先使用 sp_detach_db存儲(chǔ)過程進(jìn)行分離用戶數(shù)據(jù)庫(kù)。
需要用這種方法的同學(xué),只能祝你好運(yùn)了,成功了可以在下面留個(gè)言。
PS:不知道有沒有影響,以防萬一我還給linux本身裝了語言包。
參考文章
linux / centos 安裝SQL Server 2017 設(shè)置默認(rèn)語言與排序規(guī)則Chinese_PRC_CI_AS
Linux 設(shè)置 Centos 7 顯示中文
Mssql 2017修改master默認(rèn)排序規(guī)則

