Làm cách nào để nhập / xuất cơ sở dữ liệu MySQL mà không chuyển hướng?


7

Tôi đã được thông báo rằng việc chuyển hướng qua shell (ví dụ <>) có thể (không phải luôn luôn) ảnh hưởng đến việc đối chiếu cơ sở dữ liệu (.eg utf8). Làm cách nào tôi có thể nhập xuất mà không chuyển hướng để tôi không phải lo lắng về việc này.


Chưa bao giờ nghe nói về điều đó trước. Bạn có một số ví dụ / bằng chứng cho điều này? Tôi không nghĩ rằng việc chuyển hướng làm điều gì đó tương tự vì * nix hoàn toàn biết về UTF8 và xử lý nó như bình thường.
DrColossos

@DrColossos, có lẽ không đặt chính xác trang mã trong dấu nhắc lệnh của Windows có thể gây xáo trộn.
Synetech

Tôi giữ ý nghĩa để quay lại và hỏi ai đó hiểu lý do của nguyên nhân gây ra điều này ... bởi vì tôi không thường xuyên giải quyết nó.
xenoterracide

Câu trả lời:


4

Luôn có tiện ích mysqlimport , tuy nhiên, nguồn của bạn sẽ phải được phân tách các giá trị ... chẳng hạn như các giá trị thu được từ "CHỌN * TỪ ... VÀO RA NGOÀI ..."

Nếu bạn đang di chuyển một lượng lớn dữ liệu, có thể sử dụng phương thức tải hàng loạt này sẽ nhanh hơn .

Tuy nhiên, hãy cẩn thận với những hậu quả mà nó có thể gây ra.


Một chương trình xuất khẩu thì sao? Tôi đồng ý rằng cũng nên có một cách để một người thực thi có thể trực tiếp đọc và viết một tệp nguồn, nhưng một lần nữa, chúng đến từ * nix, trong đó việc chuyển hướng và đường ống được sử dụng thường xuyên hơn nhiều so với trong Windows.
Synetech

Nếu bạn đang tìm kiếm một giao diện GUI / Windows để làm việc, hãy thử TOAD cho mysql. Quest.com/toad-for-mysql
Randomx

Công cụ dòng lệnh có khả năng đọc / ghi tập tin trực tiếp.
Synetech

2

Bạn có thể muốn thực hiện lệnh này trên máy chủ nhập khẩu

SHOW CREATE DATABASE dbname;

Điều này sẽ cho bạn thấy đối chiếu mặc định của cơ sở dữ liệu bạn muốn nhập vào.

Bạn cũng có thể thay đổi đối chiếu cơ sở dữ liệu nhập nếu cần.

CẬP NHẬT !!!

Trước hết, tôi sẽ xem hệ điều hành nói bộ ký tự là gì. Trên dòng lệnh Linux, chỉ cần chạy này:

echo ${LANG}

Từ quan điểm của MySQL

Bạn có thể đặt tên rõ ràng cho bộ ký tự mặc định trong mysqldump

--default-character-set (default is utf8)

Bạn có thể thấy nó trong máy khách mysql:

mysql> show variables like '%charac%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Hãy thử một lần !!!

Đối với đối chiếu, bạn có thể cần đặt một hoặc nhiều biến môi trường như sau:

mysql> show variables like '%coll%';<BR>
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

Đặt các mục này một cách rõ ràng khi xuất cho mysqldump và nhập cho mysql như sau:

mysqldump -h... -u... -p... --default-character-set=utf8 --triggers --routines source_db | mysql -h... -u... -p... --collation_connection=latin1_swedish_ci -A -Dtarget_db

1
Tôi không nghĩ rằng điều này trả lời hoàn toàn câu hỏi. Tôi nghĩ rằng câu hỏi là về việc chuyển đổi sai trong khi hướng đầu ra của bản sao lưu vào một .sqltệp chứ không phải thay đổi đối chiếu. Vì vậy, vấn đề dường như là ở chính xuất khẩu, không phải trong đối chiếu của bảng.
DrColossos

Cập nhật câu trả lời của tôi.
RolandoMySQLDBA

1
+1 Tôi nghĩ rằng tùy chọn bộ ký tự mặc định là phần quan trọng và giải thích tốt!
DrColossos

@DrColossos +1 trong Cảm ơn vì đã nhìn qua vai tôi và chắc chắn rằng tôi đã trả lời câu hỏi theo ngữ cảnh !!!
RolandoMySQLDBA

;) Nevermind, tôi cũng đã học được một cái gì đó mới!
DrColossos

1

Chà, bạn có thể đăng nhập vào MySQL và làm:

mysql> source myfile.sql

Điều đó đưa vỏ ra khỏi hình ảnh hoàn toàn - nhưng tôi vẫn sẽ khuyên bạn nên kiểm tra các biến môi trường như thế nào NLS_LANG.


1
hoặc mysql -e "nguồn myfile.sql"
JackLeo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.