Tan Phat Media

CSV to SQL INSERT

Dán CSV hoặc tải tệp lên, nhận ngay câu lệnh INSERT đúng cú pháp cho MySQL, PostgreSQL, SQL Server và SQLite

Dữ liệu CSV
Tùy chọn sinh câu lệnh

Số dòng

4

Số cột

7

Số câu lệnh

1

Kiểu dữ liệu đoán được cho từng cột
CộtKiểu đoánKiểu SQL cho MySQL / MariaDBCó giá trị rỗngGiá trị mẫu
id
Số nguyên
INTKhông1
ho_ten
Chuỗi
VARCHAR(50)KhôngNguyễn Văn An
email
Chuỗi
VARCHAR(50)Khôngan.nguyen@example.com
so_dien_thoai
Chuỗi
VARCHAR(50)Không0903123456
luong
Số thực
DECIMAL(18,4)Có, sinh NULL18500000
da_kich_hoat
Boolean
TINYINT(1)Khôngtrue
ngay_vao_lam
Ngày
DATEKhông2023-04-01
Cần lưu ý trước khi chạy
  • - Cột so_dien_thoai có số bắt đầu bằng 0 nên được giữ dạng chuỗi để không mất số 0 đầu.
Câu lệnh SQL
Công cụ này làm gì và không làm gì

Trang này chỉ lo một việc: biến bảng dữ liệu dạng CSV thành câu lệnh INSERT chạy được, kèm đoán kiểu cột và mệnh đề upsert. Toàn bộ xử lý chạy trên trình duyệt, tệp CSV không rời khỏi máy bạn.

Hợp tác ngay với Tấn Phát Digital

Chúng tôi không chỉ thiết kế website, mà còn giúp doanh nghiệp xây dựng thương hiệu số mạnh mẽ. Cung cấp dịch vụ thiết kế website trọn gói từ thiết kế đến tối ưu SEO. Hãy liên hệ ngay với Tấn Phát Digital để cùng tạo nên những giải pháp công nghệ đột phá, hiệu quả và bền vững cho doanh nghiệp của bạn tại Hồ Chí Minh.

Chuyển CSV sang câu lệnh INSERT cho MySQL, PostgreSQL, SQL Server và SQLite

Công cụ nhận bảng dữ liệu dạng CSV từ ô dán hoặc từ tệp tải lên, tự đoán kiểu của từng cột rồi sinh câu lệnh INSERT đúng cú pháp thoát chuỗi của hệ quản trị bạn chọn. Có thêm tùy chọn gộp nhiều dòng vào một câu, chia lô, sinh kèm CREATE TABLE và mệnh đề xử lý trùng khóa.

Tính năng nổi bật

  • Nhận CSV từ ô dán hoặc tệp tải lên, đọc được cả trường có dấu nháy kép và dấu phân cách nằm trong nội dung
  • Bốn dấu phân cách: dấu phẩy, dấu chấm phẩy, tab và dấu gạch đứng, kèm nút đoán tự động từ dòng đầu
  • Đoán kiểu từng cột thành số nguyên, số thực, boolean, ngày, ngày giờ hoặc chuỗi, ô rỗng thành NULL
  • Bốn hệ quản trị với cách thoát chuỗi và cách bọc tên bảng riêng: MySQL, PostgreSQL, SQL Server, SQLite
  • Gộp nhiều dòng vào một câu INSERT và chia lô theo số dòng bạn đặt, tự hạ về 1000 dòng khi chọn SQL Server
  • Sinh kèm câu CREATE TABLE với kiểu dữ liệu và ràng buộc NOT NULL suy ra từ chính dữ liệu
  • Mệnh đề upsert theo từng hệ: ON DUPLICATE KEY UPDATE, ON CONFLICT DO UPDATE, DO NOTHING và INSERT IGNORE
  • Bảng tóm tắt kiểu đoán được cho từng cột, kèm cảnh báo về dòng lệch số cột và cột giữ số 0 ở đầu

Vì sao không nên viết tay câu INSERT từ tệp CSV

Nạp một tệp CSV vài trăm dòng vào database nghe rất đơn giản cho tới lúc gặp dòng có dấu nháy trong tên riêng, ô ngày tháng ghi theo kiểu Việt Nam, hoặc số điện thoại bắt đầu bằng số 0. Viết tay thì mất hàng giờ, dùng chức năng nhập tệp của trình quản trị thì lại đòi quyền tải tệp lên máy chủ và không phải môi trường nào cũng cho. Còn dùng lệnh nhập của từng hệ quản trị thì mỗi hệ một cú pháp: MySQL có LOAD DATA INFILE, PostgreSQL có COPY, SQL Server có BULK INSERT, và cả ba đều đòi tệp phải nằm sẵn trên máy chủ. Câu INSERT thuần là mẫu số chung chạy được ở mọi nơi: dán vào cửa sổ truy vấn, đưa vào tệp migration, gửi cho quản trị viên chạy giúp, hay nhét vào tập lệnh khởi tạo dữ liệu mẫu cho môi trường kiểm thử. Công cụ này lo phần cực nhất là thoát chuỗi và đoán kiểu, phần bạn cần làm chỉ là chọn hệ quản trị và tên bảng.

Lợi ích khi sử dụng

  • Không phải cài công cụ nhập liệu hay xin quyền tải tệp lên máy chủ database
  • Cùng một tệp CSV sinh được bốn phương ngữ SQL khác nhau chỉ bằng một lần chọn
  • Nhìn thấy kiểu dữ liệu đoán được trước khi chạy, tránh cột số điện thoại bị mất số 0 đầu
  • Tệp CSV không rời khỏi máy vì mọi xử lý chạy bằng JavaScript trên trình duyệt
  • Chia lô sẵn giúp câu lệnh không vượt giới hạn gói tin của MySQL hay giới hạn 1000 dòng của SQL Server

Cách chuyển CSV sang câu lệnh INSERT

  1. 1Dán nội dung CSV vào ô văn bản hoặc bấm chọn tệp để tải lên, dấu phân cách sẽ được đoán tự động từ tệp.
  2. 2Kiểm tra công tắc dòng đầu tiên là tiêu đề cột, tắt đi nếu tệp của bạn không có dòng tiêu đề.
  3. 3Nhập tên bảng đích và chọn hệ quản trị, cách bọc tên bảng cùng cách viết boolean đổi theo lựa chọn này.
  4. 4Xem lại bảng kiểu dữ liệu đoán được cho từng cột, đây là bước phát hiện sớm cột bị đoán sai kiểu.
  5. 5Bật các tùy chọn cần thiết như gộp nhiều dòng, chia lô, sinh kèm CREATE TABLE hoặc mệnh đề xử lý trùng khóa, rồi chép câu lệnh hoặc tải về tệp .sql.

Quy tắc đoán kiểu dữ liệu và lý do số 0 ở đầu được giữ nguyên

Công cụ quét toàn bộ giá trị của một cột rồi mới quyết định kiểu, chứ không nhìn mỗi dòng đầu tiên. Thứ tự xét như sau. Trước hết, ô rỗng cùng các chuỗi null, nil, none, n/a và ký hiệu \N của PostgreSQL được coi là giá trị thiếu và sẽ sinh ra từ khóa NULL không có dấu nháy. Tiếp theo, nếu mọi giá trị còn lại đều nằm trong nhóm true, false, yes, no, t, f thì cột là boolean. Sau đó tới số nguyên, với một ngoại lệ quan trọng: nếu có bất kỳ giá trị nào bắt đầu bằng số 0 và dài hơn một chữ số, cả cột bị đẩy về kiểu chuỗi. Đây là quy tắc cứu sống cột số điện thoại, mã bưu chính, mã số thuế và số tài khoản của Việt Nam, vì lưu chúng thành số sẽ mất số 0 đầu và không cách nào khôi phục. Cột số thực chỉ được nhận khi có ít nhất một giá trị mang dấu chấm thập phân. Cuối cùng là ngày giờ rồi tới ngày, chấp nhận cả dạng năm-tháng-ngày lẫn dạng ngày/tháng/năm quen dùng ở Việt Nam, và cả hai được chuẩn hóa về dạng ISO trước khi đưa vào câu lệnh. Không khớp nhóm nào thì cột là chuỗi.

Bốn hệ quản trị khác nhau ở đúng những chỗ nào

Khác biệt đầu tiên là cách bọc tên bảng và tên cột. MySQL dùng dấu huyền, SQL Server dùng cặp ngoặc vuông, còn PostgreSQL và SQLite dùng dấu nháy kép theo chuẩn SQL. Chọn sai kiểu bọc thì câu lệnh báo lỗi cú pháp ngay dòng đầu. Khác biệt thứ hai là cách thoát dấu nháy đơn trong chuỗi. Chuẩn SQL quy định nhân đôi dấu nháy, và ba hệ đều theo chuẩn đó. Riêng MySQL với cấu hình mặc định còn coi dấu chéo ngược là ký tự thoát, nên một chuỗi kết thúc bằng dấu chéo ngược có thể nuốt luôn dấu nháy đóng và làm hỏng cả câu lệnh, vì vậy công cụ nhân đôi dấu chéo ngược khi bạn chọn MySQL. Khác biệt thứ ba là kiểu boolean: PostgreSQL có kiểu BOOLEAN thật nên sinh ra TRUE và FALSE, còn MySQL lưu vào TINYINT, SQL Server lưu vào BIT và SQLite lưu vào INTEGER nên đều sinh ra số 1 và số 0. Khác biệt cuối là mệnh đề xử lý trùng khóa, mỗi hệ một cú pháp riêng và SQL Server thì không có mệnh đề nào tương đương.

Gộp dòng, chia lô và các giới hạn kỹ thuật cần biết trước khi chạy

Một câu INSERT một dòng cho một trăm nghìn dòng dữ liệu là cách chậm nhất có thể, vì mỗi câu là một lượt phân tích cú pháp và thường là một giao dịch riêng. Gộp nhiều dòng vào một câu giảm mạnh chi phí đó, nhưng không thể gộp vô hạn. MySQL giới hạn kích thước một gói tin bằng tham số max_allowed_packet, mặc định thường là 64 mê ga byte ở các bản mới và chỉ 4 mê ga byte ở nhiều bản cũ; câu lệnh vượt ngưỡng sẽ bị ngắt kết nối chứ không báo lỗi cú pháp, khiến người mới rất khó đoán nguyên nhân. SQL Server có giới hạn cứng và rõ ràng hơn: một mệnh đề VALUES chỉ nhận tối đa một nghìn dòng, nên công cụ tự hạ kích thước lô về mức này khi bạn chọn SQL Server. PostgreSQL và SQLite không có trần cố định nhưng vẫn nên chia lô để câu lệnh không phình quá lớn trong bộ nhớ. Mức một trăm tới năm trăm dòng mỗi lô là vùng an toàn cho hầu hết trường hợp. Với tệp lớn, hãy tải tệp .sql về rồi chạy bằng công cụ dòng lệnh thay vì dán vào trình quản trị chạy trên trình duyệt.

Upsert: cùng một ý tưởng, bốn cách viết và một hệ không có

Upsert nghĩa là chèn dòng mới nếu chưa có, còn nếu đã có thì cập nhật. Cách viết khác nhau theo từng hệ. PostgreSQL và SQLite dùng cùng cấu trúc ON CONFLICT với cột khóa đặt trong ngoặc, sau đó chọn DO NOTHING để bỏ qua hoặc DO UPDATE SET để cập nhật, trong đó giá trị mới được tham chiếu qua bảng ảo tên EXCLUDED ở PostgreSQL và excluded ở SQLite. MySQL không cần nêu tên cột khóa mà dựa vào mọi ràng buộc duy nhất đang có, viết là ON DUPLICATE KEY UPDATE với hàm VALUES để lấy giá trị mới, hoặc dùng INSERT IGNORE để bỏ qua dòng trùng. Một điểm cần nhớ là cả hai cách của MySQL và PostgreSQL chỉ hoạt động khi cột khóa bạn chọn đã có ràng buộc PRIMARY KEY hoặc UNIQUE trong bảng đích; nếu chưa có, câu lệnh sẽ báo lỗi hoặc âm thầm chèn thêm dòng trùng. SQL Server không có cú pháp một dòng nào tương đương, cách chính thống là nạp dữ liệu vào bảng tạm rồi chạy lệnh MERGE, nên công cụ chỉ chèn ghi chú nhắc bạn hướng đi này.

Những cái bẫy thường gặp khi nạp CSV tiếng Việt vào database

Bẫy thứ nhất là bảng mã. Tệp CSV xuất từ Excel bản tiếng Việt thường lưu theo bảng mã cũ chứ không phải UTF-8, mở lên thấy chữ có dấu biến thành ký tự lạ. Hãy lưu lại bằng tùy chọn CSV UTF-8 trước khi dán vào đây. Bẫy thứ hai là bảng đích chưa dùng bộ ký tự đủ rộng: với MySQL, bộ utf8 cũ chỉ lưu được ba byte cho một ký tự nên biểu tượng cảm xúc và một số ký tự hiếm bị cắt, phải dùng utf8mb4, và câu CREATE TABLE mà công cụ sinh ra đã đặt sẵn bộ này. Bẫy thứ ba là dấu phân cách: máy tính đặt vùng Việt Nam thường xuất CSV bằng dấu chấm phẩy vì dấu phẩy đã dùng làm dấu thập phân, nên nếu dán vào mà thấy chỉ có một cột thì hãy đổi dấu phân cách hoặc bấm nút đoán. Bẫy thứ tư là số có dấu ngăn cách hàng nghìn như 1.500.000; những giá trị này bị coi là chuỗi, hãy bỏ dấu ngăn cách trong tệp nguồn trước khi chuyển. Bẫy cuối là dòng thiếu cột do ô cuối bị bỏ trống, công cụ sẽ bù chuỗi rỗng và báo số dòng bị lệch để bạn kiểm tra lại nguồn.

Câu hỏi thường gặp (FAQ)

Tệp CSV của tôi có được gửi lên máy chủ không?

Không. Tệp được đọc bằng trình đọc tệp của trình duyệt và toàn bộ việc phân tích, đoán kiểu, sinh câu lệnh đều chạy bằng JavaScript ngay trên máy bạn. Không có lời gọi mạng nào trong quá trình này, kể cả khi bạn bấm tải tệp .sql về.

Vì sao cột số điện thoại lại thành kiểu chuỗi thay vì số?

Vì có giá trị bắt đầu bằng số 0 và dài hơn một chữ số. Nếu lưu thành số nguyên, số 0 ở đầu sẽ mất và 0903123456 thành 903123456. Quy tắc này áp dụng cho cả mã bưu chính, mã số thuế và số tài khoản, và không có cách nào khôi phục số 0 sau khi đã nạp sai.

Ô để trống trong CSV sẽ thành NULL hay thành chuỗi rỗng?

Thành NULL không có dấu nháy. Các chuỗi null, nil, none, n/a và ký hiệu \N cũng được hiểu là giá trị thiếu. Nếu bạn thực sự muốn chuỗi rỗng thay vì NULL, hãy điền một ký tự đại diện vào tệp nguồn rồi cập nhật lại sau khi nạp.

Chọn MySQL và PostgreSQL thì câu lệnh khác nhau chỗ nào?

Khác ở ba chỗ: MySQL bọc tên bảng bằng dấu huyền còn PostgreSQL bằng dấu nháy kép; MySQL nhân đôi cả dấu chéo ngược khi thoát chuỗi còn PostgreSQL chỉ nhân đôi dấu nháy đơn; boolean ở MySQL viết thành 1 và 0 còn PostgreSQL viết thành TRUE và FALSE.

Nên đặt bao nhiêu dòng cho mỗi lô?

Một trăm tới năm trăm dòng là vùng an toàn cho hầu hết trường hợp. Với SQL Server, giới hạn cứng là một nghìn dòng cho một mệnh đề VALUES nên công cụ tự hạ xuống mức đó. Với MySQL, lô quá lớn có thể vượt tham số max_allowed_packet và bị ngắt kết nối giữa chừng.

Câu ON DUPLICATE KEY UPDATE chạy mà không cập nhật gì, vì sao?

Nhiều khả năng cột bạn chọn làm khóa xét trùng chưa có ràng buộc PRIMARY KEY hoặc UNIQUE trong bảng đích. Không có ràng buộc thì database không coi dòng nào là trùng, nên mọi dòng đều được chèn mới. Hãy thêm ràng buộc duy nhất cho cột đó trước khi chạy.

Vì sao SQL Server không có tùy chọn upsert?

Vì T-SQL không có mệnh đề nào tương đương ON CONFLICT hay ON DUPLICATE KEY. Cách làm chuẩn là nạp dữ liệu vào bảng tạm rồi chạy lệnh MERGE để so khớp và cập nhật. Khi bạn chọn SQL Server kèm upsert, công cụ chèn ghi chú nhắc lại hướng đi này ở đầu tệp kết quả.

Ngày tháng ghi kiểu 15/03/2024 có nhận được không?

Có. Công cụ nhận cả dạng ngày/tháng/năm quen dùng ở Việt Nam lẫn dạng năm-tháng-ngày theo chuẩn ISO, và chuẩn hóa hết về dạng ISO trước khi đưa vào câu lệnh vì mọi hệ quản trị đều hiểu dạng này. Chỉ khi cả cột đều đúng khuôn thì cột mới được nhận là kiểu ngày.

Chữ tiếng Việt bị lỗi thành ký tự lạ sau khi nạp thì xử lý sao?

Có hai nguyên nhân. Một là tệp CSV không lưu theo UTF-8, hãy xuất lại từ Excel bằng tùy chọn CSV UTF-8. Hai là bảng đích dùng bộ ký tự cũ, với MySQL hãy chuyển cột sang utf8mb4; câu CREATE TABLE mà công cụ sinh ra đã đặt sẵn bộ ký tự này.

Câu CREATE TABLE sinh ra có kèm khóa chính không?

Không. Công cụ chỉ suy được kiểu dữ liệu và tính có thể rỗng từ chính dữ liệu, còn khóa chính, khóa ngoại, chỉ mục và giá trị mặc định là quyết định thiết kế mà dữ liệu không nói được. Hãy xem câu CREATE TABLE như bản nháp rồi bổ sung ràng buộc bằng tay.

Tệp bao nhiêu dòng thì công cụ còn chạy mượt?

Vài nghìn dòng chạy tức thì. Từ khoảng năm nghìn dòng trở lên, kết quả vẫn đúng nhưng ô văn bản hiển thị bắt đầu nặng, khi đó nên tải tệp .sql về rồi chạy bằng công cụ dòng lệnh. Với tệp hàng trăm nghìn dòng, hãy cân nhắc lệnh nhập hàng loạt riêng của từng hệ quản trị.

Công cụ này khác gì trang tạo câu CREATE TABLE trên site?

Trang này lo phần dữ liệu, nhận bảng CSV có sẵn và sinh câu lệnh nạp dữ liệu vào bảng đã tồn tại. Trang SQL Create Table Generator lo phần cấu trúc, giúp bạn khai báo cột, kiểu, khóa và ràng buộc khi thiết kế bảng mới từ đầu. Hai việc khác nhau nên dùng hai công cụ khác nhau.

Từ khóa liên quan

  • chuyển csv sang sql
  • csv to sql insert online
  • tạo câu lệnh insert từ excel
  • import csv vào mysql
  • import csv vào postgresql
  • sinh câu insert nhiều dòng
  • on duplicate key update mysql
  • on conflict do update postgresql
  • insert ignore là gì
  • escape dấu nháy trong sql
  • max_allowed_packet mysql
  • giới hạn 1000 dòng insert sql server
  • csv utf-8 lỗi font tiếng việt
  • utf8mb4 mysql tiếng việt
  • giữ số 0 đầu số điện thoại
  • chuyển csv sang sqlite
  • tạo create table từ csv
  • công cụ chuyển csv sang sql miễn phí
  • nạp dữ liệu mẫu vào database
  • chia lô câu lệnh insert

Công cụ Developer Tools liên quan

.env Generator

Tạo file .env và .env.example cho dự án.

.gitignore Generator

Tạo .gitignore cho Node.js, Python, Java.

API Mock Generator

Tạo mock JSON data cho API testing.

API Response Formatter

Format và phân tích API response.

API Tester

Test REST API: GET, POST, PUT, DELETE.

Postman Alternative - API Testing Tool Online với Collections, Environment & File Upload

Postman Alternative miễn phí - Test APIs với Collections, Multiple Environments, Pre-request Scripts, Collection Runner, File Upload (form-data), Tests/Assertions, Code Generation (cURL, JS, Python, Node.js). Browser-based, không cần cài đặt. Save requests, export/import collections, auto-save history. Hỗ trợ Bearer Token, Basic Auth, API Key. Hoàn hảo cho API development và testing.

Swagger API Tester - Test API với OpenAPI/Swagger Spec & Authentication Online

Swagger API Tester miễn phí - Import OpenAPI/Swagger specification và test API endpoints với đầy đủ authentication (Bearer Token/JWT, Basic Auth, API Key). Hỗ trợ OpenAPI 3.0, Swagger 2.0, auto-parse endpoints, parameters, request body. Giao diện như Swagger UI với color-coded methods, grouped endpoints, real-time testing. Hoàn hảo cho API development, testing, debugging secured APIs.

Base Converter

Chuyển đổi Binary, Hex, Base32.

Base64 Encoder

Mã hóa/giải mã Base64.

Binary Converter

Chuyển đổi Decimal, Binary, Hex.

Box Shadow Generator

Tạo CSS box-shadow trực quan.

Chmod Calculator

Tính quyền file Linux.

Dịch vụ của Tấn Phát Digital

Đang xây sản phẩm và cần thêm người làm phần nặng?

Gói giải pháp doanh nghiệp

Nền tảng custom cho ngân hàng, y tế và sàn B2B, chuẩn ISO 27001, GDPR, PCI-DSS, SLA 99.99%.

Từ 50.000.000đXem chi tiết →

Dịch vụ phát triển Blockchain & Web3

Smart contract, dApp và NFT marketplace đa chuỗi, audit bảo mật đầy đủ trước khi lên mainnet.

Từ 50.000.000đXem chi tiết →

Dịch vụ thiết kế website tại Hồ Chí Minh

Website doanh nghiệp, bán hàng và đặt lịch, chuẩn SEO ngay từ cấu trúc, tốc độ tải dưới 3 giây.

Từ 5.000.000đXem chi tiết →

Dịch vụ thiết kế landing page

Trang đích riêng cho từng chiến dịch quảng cáo, tỷ lệ chuyển đổi 3–8%, bàn giao trong 5–21 ngày.

Từ 3.000.000đXem chi tiết →

Tư vấn và báo giá miễn phí trong 24 giờ. Xem toàn bộ dịch vụ

Zalo
Facebook
Tấn Phát Digital
Zalo
Facebook