2012-06-14 75 views
6

Tôi đang quét 5000 tệp csv vào cơ sở dữ liệu. Đáng tiếc là các tập tin có '', cho 0. Vì vậy, khi bao giờ tôi chạy kịch bản của tôi nó bị treo. Tôi nghe nói rằng lỗi này có thể tránh được bằng cách tắt chế độ nghiêm ngặt. Vì vậy, tôi đã cố gắng tắt chế độ nghiêm ngặt để cho phép tôi đọc trong một chuỗi rỗng dưới dạng số 0 cho các trường số của tôi. Tuy nhiên, lỗi vẫn tồn tại.Tắt chế độ nghiêm ngặt của MySQL

Vì vậy, việc tắt chế độ nghiêm ngặt cho phép '' được đọc vào trường int? (Các '' là hai qoutes ví dụ: chuỗi rỗng)

Nếu vậy tại sao thiết

sql_mode = ''

trong file config my.ini không giải quyết được vấn đề.

Cảm ơn bạn!

Trả lời

17

Tôi đoán bạn nhập tệp CSV bằng cách sử dụng lệnh LOAD DATA INFILE. Trước khi bạn thực hiện lệnh này, gõ:

SET sql_mode = ''; 

Thông tin thêm về phương thức SQL khác nhau có thể được tìm thấy trong documentation.

+1

Có bạn là chính xác. Điều này hoạt động hoàn hảo. Tôi hơi bối rối là tại sao cài đặt không giữ, nhưng gọi nó ngay trước khi lệnh LOAD DATA hoạt động. Cảm ơn. Liên kết – Orlan

+0

đã chết. [Bấm vào đây để xem tài liệu] (https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-setting) và chi tiết về ** Chế độ SQL Server ** – gentleboy

1

Bạn có thể sửa đổi bạn LOAD DATA INFILE Tuyên bố để sửa các giá trị. Một cái gì đó dọc theo những dòng này sẽ hoạt động.

LOAD DATA INFILE 'filepath.csv' 
INTO TABLE MyTable(Column1,@Col2,@Col3) 
SET Column2=CASE WHEN @Col2 = '' THEN 0 ELSE @Col2 END 
,Column3=CASE WHEN @Col3 = '' THEN 0 ELSE @Col3 END; 

Truy vấn này nhập khẩu giá trị như là vào column1, và các bản sửa lỗi các giá trị cho cột 2 và 3. Sử dụng này, bạn không cần phải vô hiệu hóa chế độ nghiêm ngặt, và bạn đang thực sự kiểm soát được những gì dữ liệu đi vào cơ sở dữ liệu của bạn, có thể sửa chữa nó một cách đáng tin cậy. Bạn cũng có thể sử dụng tính năng này để thay đổi định dạng ngày hoặc nhập các giá trị blob được mã hóa hex. Tính năng rất hữu ích.

+0

Giải pháp tốt . Tôi không biết nó có thể xử lý dòng dữ liệu vào thời điểm này. – jkrcma

0

Tôi đang đặt câu trả lời này vì tôi chưa có đại diện nhận xét về câu hỏi tiếp theo của bạn về cài đặt không "giữ". Nó đã được kinh nghiệm của tôi với MySQL rằng các thiết lập trong tập tin cấu hình chỉ đọc trên bắt đầu từ máy chủ để bạn sẽ phải khởi động lại máy chủ cho các thiết lập mới có hiệu lực.

Máy chủ là daemon mà trình khách dòng lệnh giao tiếp với khi bạn chạy các lệnh để khởi động lại máy khách dòng lệnh không thực sự khởi động lại chính máy chủ.

Giải thích chi tiết hơn được cung cấp trong câu trả lời này: https://serverfault.com/a/79051.

1

Tôi cần làm điều đó, và làm việc một cách chính xác:

  1. Để tắt chế độ SQL nghiêm ngặt, SSH vào máy chủ của bạn như là người chủ
  2. Tạo tập tin này: /etc/mysql/conf.d/ disable_strict_mode.CNF
  3. Mở tập tin và nhập hai dòng sau:

    [mysqld] sql_mode = IGNORE_SPACE, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

  4. Khởi động lại MySQL với lệnh này: dịch vụ sudo mysql restart

Các vấn đề liên quan