Chuyển đổi SQL (SQL Conversion) là quá trình trích xuất dữ liệu từ tập lệnh SQL và tổ chức lại thành các định dạng dữ liệu khác như JSON, CSV, XML, YAML, HTML, Markdown v.v. SQL (Structured Query Language, ngôn ngữ truy vấn có cấu trúc) là ngôn ngữ truy vấn chuẩn cho cơ sở dữ liệu quan hệ, các công cụ xuất cơ sở dữ liệu (như mysqldump, pg_dump) thường xuất dữ liệu dưới dạng câu lệnh INSERT trong tập lệnh SQL, định dạng này tuy thuận tiện cho nhập vào cơ sở dữ liệu, nhưng lại bất tiện cho việc đọc bằng chương trình, phân tích dữ liệu hoặc trao đổi giữa các hệ thống, do đó cần chuyển đổi sang các định dạng phổ quát hơn.
Các tập lệnh xuất dữ liệu SQL phổ biến chứa hai loại câu lệnh: CREATE TABLE dùng để định nghĩa cấu trúc bảng (tên cột, kiểu dữ liệu, ràng buộc) và INSERT INTO ... VALUES (...) dùng để chèn dữ liệu cụ thể. Công cụ này phân tích cả hai loại câu lệnh, trích xuất định nghĩa cột và thông tin kiểu từ CREATE TABLE, dòng dữ liệu thực tế từ INSERT, sau đó tổ chức lại đầu ra theo định dạng người dùng chọn. Toàn bộ quá trình phân tích thực hiện cục bộ trong trình duyệt, không phụ thuộc vào bất kỳ dịch vụ backend nào.
Tại sao cần chuyển đổi SQL sang các định dạng khác? Tập lệnh SQL tuy phổ quát, nhưng lại bất tiện trong các kịch bản sau: thứ nhất, chương trình frontend đọc JSON dễ hơn nhiều so với phân tích SQL, không cần thêm trình phân tích SQL; thứ hai, các phần mềm bảng tính như Excel, Google Sheets hỗ trợ gốc CSV chứ không phải SQL; thứ ba, trong kịch bản tệp cấu hình và tài liệu YAML, Markdown dễ đọc hơn SQL; thứ tư, trao đổi dữ liệu giữa các hệ thống thường dùng XML hoặc JSON làm định dạng trung lập. Sau khi chuyển SQL sang các định dạng phổ quát này, dữ liệu có thể được tiêu thụ trực tiếp bởi nhiều công cụ và ngôn ngữ hơn.
Trình phân tích SQL của công cụ này được viết tay, tập trung vào phân tích câu lệnh INSERT và CREATE TABLE. Đối với INSERT, hỗ trợ cả bộ giá trị đơn (INSERT INTO t (a,b) VALUES (1,2)) và bộ giá trị nhiều phần tử (INSERT INTO t (a,b) VALUES (1,2), (3,4), (5,6)), tự động ánh xạ dữ liệu theo tên cột. Đối với CREATE TABLE, hỗ trợ phân tích định nghĩa cột, kiểu dữ liệu (VARCHAR(255), INT, DECIMAL(10,2) v.v. với độ dài trong ngoặc), ràng buộc và mệnh đề NOT NULL, PRIMARY KEY, IF NOT EXISTS, xử lý đúng ngoặc lồng nhau để tránh chia sai.
Nhận dạng kiểu là khía cạnh quan trọng của chuyển đổi SQL. Công cụ tự động xác định kiểu dựa trên hình thức literal của giá trị: giá trị được bao bởi dấu ngoặc đơn hoặc dấu ngoặc kép là chuỗi; NULL (không phân biệt chữ hoa chữ thường) là giá trị rỗng; TRUE/FALSE là giá trị boolean; 0x..., X'...', B'...' là literal thập lục phân; số thuần (có dấu trừ, dấu thập phân, ký hiệu khoa học) là số. Nhận dạng kiểu tự động này đảm bảo các định dạng chuyển đổi như JSON, CSV giữ được ngữ nghĩa của dữ liệu gốc (ví dụ số 1 không thành chuỗi "1"), thuận tiện cho việc xử lý đúng bởi chương trình downstream.
Khác biệt về kiểu trích dẫn giữa các phương ngữ cơ sở dữ liệu là cạm bẫy phổ biến khi phân tích SQL. MySQL mặc định dùng backtick (`) để bao định danh (tên bảng, tên cột), PostgreSQL dùng dấu ngoặc kép ("), SQL Server/T-SQL dùng dấu ngoặc vuông ([]), SQL chuẩn cũng dùng dấu ngoặc kép. Hàm unquoteIdentifier của công cụ này tự động nhận dạng và loại bỏ các trích dẫn này, đồng thời xử lý ký tự thoát trong trích dẫn (như `` → `, "" → "). Trong chế độ tái tạo SQL, câu lệnh INSERT được tạo lại với kiểu trích dẫn tương ứng cho phương ngữ mục tiêu.
Ký tự thoát chuỗi SQL là một chi tiết kỹ thuật quan trọng khác. Tiêu chuẩn SQL định nghĩa thoát dấu ngoặc đơn trong chuỗi bằng cách nhân đôi ('It''s' đại diện cho It's), MySQL mặc định cũng hỗ trợ thoát bằng backslash (\n, \t, \', \", \\\\, \0, \Z v.v.). Trình phân tích chuỗi của công cụ này đồng thời xử lý cả hai cơ chế thoát, khôi phục đúng nội dung chuỗi gốc. Khi chuyển đổi sang CSV, các trường chứa dấu phẩy, dấu ngoặc kép, dấu xuống dòng được thoát lại theo tiêu chuẩn RFC 4180; khi chuyển đổi sang XML/HTML, các ký tự đặc biệt như &, <, >, ", ' được thoát.
Xử lý frontend thuần là nguyên tắc thiết kế cốt lõi của công cụ này. Toàn bộ phân tích SQL và chuyển đổi dữ liệu thực hiện trong engine JavaScript của trình duyệt, không gửi bất kỳ dữ liệu nào đến máy chủ. Điều này có nghĩa là ngay cả khi tập lệnh SQL chứa dữ liệu nhạy cảm của người dùng, thông tin thương mại nhạy cảm hoặc cấu trúc cơ sở dữ liệu nội bộ, cũng không bị rò rỉ ra ngoài. Thiết kế này đặc biệt phù hợp để xử lý xuất cơ sở dữ liệu sản xuất, không cần lo lắng về vấn đề tuân thủ dữ liệu. Đồng thời xử lý frontend không có độ trễ mạng, tốc độ chuyển đổi chỉ bị giới hạn bởi CPU và bộ nhớ của thiết bị.
So với các công cụ chuyển đổi SQL dòng lệnh truyền thống (như sql2csv, sqlparser), công cụ này có một số ưu điểm: không cần cài đặt và cấu hình môi trường, mở trang web là dùng được; cung cấp giao diện trực quan để xem trước kết quả chuyển đổi theo thời gian thực; hỗ trợ chuyển đổi giữa nhiều định dạng đầu ra chỉ với một cú nhấp; tích hợp dữ liệu mẫu và tài liệu hướng dẫn; thiết kế đáp ứng di động để dùng ở bất kỳ đâu. Tuy nhiên công cụ tập trung vào trích xuất dữ liệu, không xử lý sự khác biệt phương ngữ SQL phức tạp (như toán tử JSONB của PostgreSQL, ON DUPLICATE KEY UPDATE của MySQL) và tính năng nâng cao (thủ tục lưu trữ, hàm, trigger); khi có nhu cầu như vậy, nên dùng công cụ cơ sở dữ liệu gốc hoặc nền tảng ETL chuyên dụng.
Khi sử dụng công cụ chuyển đổi SQL, có một số thực hành tốt cần lưu ý: thứ nhất, trước khi chuyển đổi hãy kiểm tra xem tập lệnh SQL có dữ liệu hoàn chỉnh (câu lệnh INSERT) không, chứ không chỉ có câu truy vấn (SELECT), SELECT không được phân tích; thứ hai, đối với tập lệnh SQL nhiều bảng, khuyến nghị bật «Xuất riêng nhiều bảng» để giữ thông tin cấu trúc bảng; thứ ba, khi xử lý SQL có chứa ký tự Trung Quốc, đối với đầu ra CSV khuyến nghị bật «Bao gồm BOM» để đảm bảo Excel nhận dạng đúng mã hóa; thứ tư, khi xử lý SQL dump lớn, khuyến nghị tắt «đầu ra đẹp» để giảm kích thước đầu ra; thứ năm, khi di chuyển giữa các cơ sở dữ liệu, có thể dùng chế độ «Tái tạo SQL» để chuyển phương ngữ, nhưng các kiểu phức tạp (như mảng PostgreSQL, JSONB) có thể cần điều chỉnh thủ công.