Tôi đã cố gắng tạo cơ sở dữ liệu với Mã hóa:UTF8 với một bảng và chèn hai ký tự được mã hóa UTF-8 mà lệnh COPY đang cố chèn và nó hoạt động khi sử dụng INSERT.
CREATE DATABASE test
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'English_United States.1252'
LC_CTYPE = 'English_United States.1252'
CONNECTION LIMIT = -1;
CREATE TABLE x
(
first_two_letters character(3)
)
WITH (
OIDS=FALSE
);
ALTER TABLE x
OWNER TO postgres;
INSERT INTO x(
first_two_letters)
VALUES ('سر');
Theo http://rishida.net/tools/conversion/ đối với việc SAO CHÉP không thành công, các điểm mã Unicode là:
là hai ký tự , có nghĩa là bạn có thể lưu trữ chúng trong một cột được xác định là ký tự (3), cột này lưu trữ các chuỗi có độ dài tối đa 3 ký tự (không phải byte).
và nếu chúng tôi cố gắng CHÈN, nó sẽ thành công:
INSERT INTO x(
first_two_letters)
VALUES (U&'\0633\0631');
Từ tài liệu pgdump bạn có thể CHÈN thay vì SAO CHÉP bằng cách sử dụng tùy chọn --inserts
Hãy thử sử dụng điều này thay thế cho Bước 1:
pg_dump -U postgres -t OldSchema."TableToCopy" --inserts OldDatabase > Table.sql
Tôi cũng đã cố SAO CHÉP từ một bảng sang một tệp và sử dụng SAO CHÉP để nhập và đối với tôi, nó hoạt động.
Bạn có chắc chắn mã hóa cơ sở dữ liệu máy khách và máy chủ của mình là UTF8 không?
Đầu tiên, xuất bảng có tên "x" từ lược đồ "công khai" trên cơ sở dữ liệu "thử nghiệm" sang tệp SQL văn bản thuần túy:
pg_dump -U postgres -t public."x" test > x.sql
tạo tệp x.sql chứa:
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: x; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--
CREATE TABLE x (
first_two_letters character(3)
);
ALTER TABLE public.x OWNER TO postgres;
--
-- Data for Name: x; Type: TABLE DATA; Schema: public; Owner: postgres
--
COPY x (first_two_letters) FROM stdin;
سر
\.
--
-- PostgreSQL database dump complete
--
Thứ hai, nhập với:
psql -U postgres -d test -f x.sql