CodeKitHub
Công cụ JSON

Chuyển Đổi CSV Sang SQL

Cập nhật lần cuối:

Để chuyển một dòng CSV thành SQL, mỗi cột trở thành một giá trị trong câu lệnh INSERT INTO — số vẫn không có dấu ngoặc kép, văn bản được bọc trong dấu nháy đơn với các dấu nháy bên trong nhân đôi (O'Brien trở thành O''Brien), và các ô trống trở thành NULL. Công cụ này áp dụng phép chuyển đổi đó cho toàn bộ file CSV của bạn, hoàn toàn trong trình duyệt, với tên bảng do bạn chọn và cách escape chuỗi đúng chuẩn, nên các bảng tính đã xuất hoặc bản dump cơ sở dữ liệu không bao giờ rời khỏi thiết bị.

Công Cụ Này Là Gì?

Việc nạp dữ liệu cho một cơ sở dữ liệu thử nghiệm, tải dữ liệu xuất từ bảng tính vào một bảng, hay di chuyển một tập dữ liệu nhỏ thường bắt đầu giống nhau: bạn có một file CSV và cần SQL. Công cụ này phân tích CSV của bạn (dùng dòng tiêu đề làm tên cột) và tạo ra một câu lệnh INSERT INTO bao trọn mọi dòng dữ liệu, sẵn sàng để dán vào một client cơ sở dữ liệu.

Các giá trị chuỗi được bọc trong dấu nháy đơn, với các dấu nháy bên trong được escape bằng cách nhân đôi (nên O'Brien trở thành O''Brien) — quy tắc escape chuẩn mà MySQL, PostgreSQL và SQLite đều dùng chung. Một ô CSV trống được ghi thành từ khóa SQL NULL thay vì chuỗi rỗng — đây là lựa chọn có chủ đích, vì một ô trống trong bảng tính thường có nghĩa là "không có giá trị" chứ không phải "một đoạn văn bản rỗng", và NULL là điều mà hầu hết các schema mong đợi cho trường hợp đó.

Việc một giá trị có được đặt trong dấu ngoặc kép hay không được quyết định bởi một quy tắc suy đoán đơn giản, không phải suy luận kiểu dữ liệu thực sự: nếu ô đã cắt khoảng trắng trông giống một số nguyên hoặc số thập phân thuần túy (có thể có dấu trừ ở đầu), nó được ghi mà không có dấu ngoặc kép; mọi thứ khác — bao gồm cả những giá trị chỉ trông giống số nhưng có thêm ký tự, như mã bưu chính có số 0 ở đầu — được đặt trong dấu ngoặc kép như văn bản. Điều này giữ cho kết quả trung thực: đó là điểm khởi đầu tốt cho một lần nhập nhỏ, không phải sự thay thế cho việc kiểm tra dữ liệu của bạn so với schema bảng thực tế trước khi chạy.

Nguồn: việc phân tích CSV tuân theo RFC 4180, thứ gần nhất với một chuẩn CSV chính thức; việc nhân đôi dấu nháy đơn để escape chuỗi là quy ước chung được ghi lại bởi MySQL, PostgreSQL và SQLite.

Tại Sao Nên Dùng?

  • Tên bảng tùy chỉnh — thiết lập một lần, và mọi dòng đều nhắm vào bảng đó.
  • Escape chuỗi chính xác — dấu nháy đơn bên trong giá trị được nhân đôi để SQL không bị hỏng hoặc bị cắt cụt.
  • Xử lý NULL dễ đoán — ô trống trở thành NULL thay vì chuỗi rỗng, khớp với cách hầu hết cơ sở dữ liệu phân biệt dữ liệu thiếu.
  • Cú pháp SQL phổ biến — câu lệnh INSERT INTO ... VALUES ... được tạo ở đây hoạt động không cần chỉnh sửa trên MySQL, PostgreSQL và SQLite.
  • 100% phía client — dữ liệu CSV của bạn (có thể bao gồm hồ sơ khách hàng hoặc dữ liệu kinh doanh) được phân tích và chuyển đổi ngay trong trình duyệt và không bao giờ được tải lên bất kỳ đâu.

Cách Sử Dụng

  1. Dán dữ liệu CSV có dòng tiêu đề, ví dụ name,age\nAlice,30\nBob,25.
  2. Nhập tên bảng đích (mặc định là my_table).
  3. Nhấn "Tạo SQL".
  4. Sao chép câu lệnh INSERT INTO hoặc tải xuống dưới dạng file .sql, sau đó chạy nó trên cơ sở dữ liệu của bạn.

Ví dụ

Đầu vào

name,age,city
Alice,30,
Bob,,NYC

Đầu ra

INSERT INTO `my_table` (`name`, `age`, `city`)
VALUES
  ('Alice', 30, NULL),
  ('Bob', NULL, 'NYC');

Chú ý cách các ô trống trở thành NULL (không phải chuỗi rỗng), và giá trị age trông giống số 30 vẫn không có dấu ngoặc kép trong khi mọi giá trị văn bản đều được đặt trong dấu ngoặc kép.

Mẹo thực tế

  • Nạp dữ liệu cho cơ sở dữ liệu thử nghiệm cục bộ: xuất một mẫu nhỏ dưới dạng CSV từ bảng tính, chuyển đổi tại đây, và chạy câu lệnh INSERT trên cơ sở dữ liệu phát triển của bạn.
  • Luôn kiểm tra kiểu dữ liệu cột trước khi chạy SQL được tạo ra trên một bảng thật — công cụ này suy đoán số hay văn bản bằng một quy tắc đơn giản, không dựa trên schema thực tế của bạn, nên một cột số nguyên đòi hỏi định dạng cụ thể có thể cần điều chỉnh thủ công.
  • Nếu bạn có hàng nghìn dòng, câu lệnh INSERT nhiều dòng duy nhất mà công cụ này tạo ra vẫn là SQL hợp lệ, nhưng các câu lệnh quá lớn có thể vượt quá kích thước gói tối đa của cơ sở dữ liệu — hãy chia CSV thành các lô nhỏ hơn trước nếu bạn gặp giới hạn đó.

Vì sao dùng NULL chứ không phải chuỗi rỗng

Một lỗi thường gặp khi viết tay script chuyển CSV sang SQL là coi mỗi ô thiếu là một chuỗi rỗng ''. Về mặt kỹ thuật đó vẫn là SQL hợp lệ, nhưng thường không mang ý nghĩa bạn muốn: một cột được định nghĩa là số nguyên sẽ từ chối thẳng '', và ngay cả trong một cột văn bản, '' lặng lẽ mang ý nghĩa khác với "chúng ta không biết giá trị này" trong hầu hết các thiết kế schema và truy vấn báo cáo (một kiểm tra WHERE column IS NULL sẽ không khớp với chuỗi rỗng, và ngược lại). Dùng NULL cho các ô trống khớp với ngữ nghĩa mà hầu hết cơ sở dữ liệu và ORM mong đợi, và tránh được lỗi kiểu dữ liệu khi một cột số vô tình có giá trị thiếu ở một số dòng.

Câu Hỏi Thường Gặp

Công cụ này có hoạt động với mọi cơ sở dữ liệu SQL không?

Cú pháp được tạo ra — định danh trong dấu backtick, giá trị chuỗi trong dấu nháy đơn, câu lệnh INSERT INTO ... VALUES ... tiêu chuẩn — phổ biến trên MySQL, PostgreSQL và SQLite. PostgreSQL không yêu cầu nghiêm ngặt dấu backtick quanh định danh (nó dùng dấu nháy kép nếu cần đặt trong dấu ngoặc), nhưng tên trong dấu backtick cũng không gây vấn đề gì ở đó, miễn là bạn không có tên cột bất thường trùng với từ khóa dành riêng. Không có một chuẩn SQL chính thức duy nhất nào được tuân theo ở đây — chỉ là cú pháp hoạt động không cần sửa đổi trên các cơ sở dữ liệu phổ biến nhất.

Tại sao ô trống lại trở thành NULL thay vì chuỗi rỗng ''?

Đây là lựa chọn thiết kế có chủ đích: trong hầu hết các dữ liệu CSV xuất ra thực tế, một ô trống có nghĩa là giá trị chưa biết hoặc không áp dụng, chứ không phải theo nghĩa đen là một đoạn văn bản rỗng. NULL là điều mà hầu hết schema cơ sở dữ liệu mong đợi cho trường hợp đó. Nếu trường hợp sử dụng của bạn thực sự cần chuỗi rỗng, bạn sẽ cần chỉnh sửa SQL được tạo ra bằng tay cho những trường hợp đó.

Công cụ quyết định một giá trị có cần dấu ngoặc kép hay không như thế nào?

Đây là một quy tắc suy đoán đơn giản, không phải suy luận kiểu dữ liệu thực sự: nếu một ô đã cắt khoảng trắng chỉ gồm các chữ số (có thể có dấu trừ ở đầu và tối đa một dấu chấm thập phân), nó được ghi thành số mà không có dấu ngoặc kép. Mọi thứ khác được đặt trong dấu ngoặc kép như văn bản. Điều này nghĩa là một mã bưu chính như 00501 hay số điện thoại chỉ được xử lý như văn bản nếu có thêm ký tự khác — riêng số 0 ở đầu vẫn được phân tích thành số ở đây, vì vậy hãy kiểm tra kỹ các định danh như mã bưu chính và ID trước khi chạy SQL.

Dữ liệu của tôi có được tải lên đâu không?

Không. Cả việc phân tích lẫn tạo SQL đều diễn ra bằng JavaScript trong trình duyệt của bạn — không có gì được gửi đến máy chủ, giúp việc sử dụng an toàn với hồ sơ khách hàng hoặc dữ liệu kinh doanh đã xuất ra.

Công cụ có xử lý được giá trị CSV chứa dấu phẩy hoặc dấu ngoặc kép không?

Có. CSV được phân tích bằng một bộ phân tích trường có dấu ngoặc kép phù hợp, hiểu được dấu phẩy, xuống dòng và dấu ngoặc kép được nhân đôi bên trong các trường có dấu ngoặc kép — không phải chỉ tách theo dấu phẩy đơn giản — nên một trường như "Smith, John" được đọc thành một giá trị duy nhất, không bị tách thành hai cột.

Công Cụ Liên Quan