很久沒有寫文章了,最近實在是被公司的舊系統搞的快崩潰,姑且不論網站是 2007 年使用的技術及架構及沒有導入版本控管,大家都正式機上寫 code,但一個網站(或應用) 會連接好多個資料庫,有 MySQL 和 MSSQL ,可想而知 Query 來的資料還要轉碼搞的很複雜,接手的人當然亂了,我看到 code 及架構,只會讓我躁鬱而已,想說是否有機會來分階段改造改造,理想上是想把系統獨立互開 API,當然我不可能現在建議直接打掉重來,目前是很想先從 DB 著手。
MariaDB 從 10 版開始有支援了 CONNECT Storage Engine,這個 Storage Engine 能夠讓我們在 MariaDB 上建立一個從遠端來的資料庫表,假設我的應用會同時連接 MariaDB 及 MSSQL 的時候,我可以把 MSSQL 的某個表建立在 MariaDB 上,在使用上就一律用 MariaDB 的命令就能操作,這樣或許能夠降低程式開發的複雜度吧 ..... 這是我的主觀而已,還是介紹一個 CONNECT Storage Engine 的用法吧。
安裝方式
很簡單,只要在 phpmyadmin 或 mariadb console 下執行下列命令就可以讓 mariadb 支援 connect storage engine 了。
INSTALL SONAME 'ha_connect';
查看 ha_connect 有沒有被載入,用下列命令查詢
SHOW ENGINES;
成功的話會如以下截圖看見有 CONNECT 的 Engine。
使用方式介紹
這裡就以 MS SQL 某個表為範例,示範如何將 MS SQL 的表加到 MariaDB 來,我的環境都是在 Windows 下的,假設 MS SQL 的環境如下:
- SQL Server 版本 : SQL Express 2012
- 啟用 TCP/IP 並且 Port 設定為 1433
- Database 名稱 : MS_ABC
- 要測試的表格名稱 : MS_XYZ
- 帳密 : sa 和 1234
MariaDB 環境如下
- MariaDB 版本 : 10.0.13
- Database 名稱 : maria_abc
以上的條件若要在 MariaDB 建立一個表格名稱叫 xyz 是對應到 MSSQL 的 MS_XYZ,下以下命令即可
CREATE TABLE xyz ( id int(10) NOT NULL , name VARCHAR(50) ) ENGINE=CONNECT DEFAULT CHARSET big5 CONNECTION='Driver={SQL Server Native Client 11.0};Server=localhost;Database=MS_ABC;Uid=sa;Pwd=1234;' table_type=ODBC block_size=10 tabname='TB_XYZ'
這時候可以用工具看到 MariaDB 資料庫中有個表格 xyz 及資料了。
這種做法就等於把遠端資料表當作本地資料表一樣,根據測試簡單的查詢應用或刪除資料所下的 SQL 語法可以完全用 MySQL 的語法,和 MariaDB 的表作簡單的 JOIN 都可以的,我並沒有實際去測試各種語法,因為不太可能用這種架構做太複雜的應用對吧,簡單的查詢就夠了,而且可以發現用這方法,即便 MS SQL 預設是 big5 , 但在 MariaDB 下 Query 餵的資料是 utf8 不用轉碼了,如此可省掉程式設計轉碼的部分,各位可以試試看喔。
您好,我發現在這個軟體下使用查詢都正常,但是當使用php去使用查詢就不能用了…
應該是可以的
phpmyadmin 都可以正常操作,可能是你的 code 有問題吧
請問,
這個是不是類似 dblink 連接他牌資料庫的功能?
沒用過dblink,但應該跟你說的相同,但能連接他牌資料庫並進行各種操作是可以的