Python cắt ngắn chuỗi

TênMô tảcharacter varying(n), varchar(n)độ dài thay đổi có giới hạncharacter(n), char(n)độ dài cố định, đệm trốngtextđộ dài thay đổi không giới hạn

hiển thị các loại ký tự có mục đích chung có sẵn trong PostgreSQL

SQL định nghĩa hai loại ký tự chính. _______________) và _______________), khi _______________ là số nguyên dương. Cả hai loại này đều có thể lưu trữ các chuỗi có độ dài lên đến n ký tự (không phải byte). Nỗ lực lưu trữ một chuỗi dài hơn vào một cột thuộc các loại này sẽ dẫn đến lỗi, trừ khi các ký tự thừa đều là khoảng trắng, trong trường hợp đó, chuỗi sẽ bị cắt ngắn đến độ dài tối đa. (Ngoại lệ hơi kỳ lạ này được yêu cầu bởi tiêu chuẩn SQL. ) Nếu chuỗi được lưu trữ ngắn hơn độ dài đã khai báo, các giá trị của loại character varying(n0 sẽ được đệm khoảng trắng;

Nếu một người chuyển một giá trị thành character varying(n) hoặc character(n một cách rõ ràng, thì một giá trị dài quá mức sẽ bị cắt bớt thành các ký tự n mà không gây ra lỗi. (Điều này cũng được yêu cầu bởi tiêu chuẩn SQL. )

Các ký hiệu varchar(n) và char(n) là bí danh của character varying(n) và character(n), tương ứng. Nếu được chỉ định, độ dài phải lớn hơn 0 và không được vượt quá 10485760. character varying(n0 không có chỉ định độ dài tương đương với varchar(n0. Nếu character varying(n1 được sử dụng mà không có chỉ định độ dài, thì loại chấp nhận các chuỗi có kích thước bất kỳ. Cái sau là một phần mở rộng PostgreSQL

Ngoài ra, PostgreSQL cung cấp loại text, lưu trữ các chuỗi có độ dài bất kỳ. Mặc dù loại text không có trong tiêu chuẩn SQL nhưng một số hệ thống quản lý cơ sở dữ liệu SQL khác cũng có loại này.

Các giá trị của loại character varying(n0 được đệm vật lý với khoảng trắng theo chiều rộng được chỉ định n, đồng thời được lưu trữ và hiển thị theo cách đó. Tuy nhiên, dấu cách được coi là không có ý nghĩa về mặt ngữ nghĩa và bị bỏ qua khi so sánh hai giá trị loại character varying(n0. Trong các đối chiếu có khoảng trắng quan trọng, hành vi này có thể tạo ra kết quả không mong muốn; . Dấu cách bị xóa khi chuyển đổi giá trị character varying(n0 thành một trong các loại chuỗi khác. Lưu ý rằng các khoảng trắng ở cuối có ý nghĩa về mặt ngữ nghĩa trong các giá trị character varying(n1 và text và khi sử dụng khớp mẫu, đó là character(n2 và các biểu thức chính quy

Các ký tự có thể được lưu trữ trong bất kỳ loại dữ liệu nào trong số này được xác định bởi bộ ký tự cơ sở dữ liệu, được chọn khi cơ sở dữ liệu được tạo. Bất kể bộ ký tự cụ thể là gì, không thể lưu trữ ký tự có mã bằng 0 (đôi khi được gọi là NUL). Để biết thêm thông tin, hãy tham khảo Phần 24. 3

Yêu cầu lưu trữ đối với một chuỗi ngắn (tối đa 126 byte) là 1 byte cộng với chuỗi thực tế, bao gồm cả phần đệm khoảng trắng trong trường hợp character varying(n0. Các chuỗi dài hơn có 4 byte chi phí thay vì 1. Các chuỗi dài được hệ thống nén tự động, vì vậy yêu cầu vật lý trên đĩa có thể ít hơn. Các giá trị rất dài cũng được lưu trữ trong các bảng nền để chúng không cản trở việc truy cập nhanh vào các giá trị cột ngắn hơn. Trong mọi trường hợp, chuỗi ký tự dài nhất có thể được lưu trữ là khoảng 1 GB. (Giá trị tối đa được phép cho n trong khai báo kiểu dữ liệu nhỏ hơn giá trị đó. Sẽ không hữu ích nếu thay đổi điều này vì với mã hóa ký tự nhiều byte, số lượng ký tự và byte có thể khá khác nhau. Nếu bạn muốn lưu trữ các chuỗi dài không có giới hạn trên cụ thể, hãy sử dụng text hoặc character varying(n1 mà không có chỉ định độ dài, thay vì tạo giới hạn độ dài tùy ý. )

Mẹo

Không có sự khác biệt về hiệu suất giữa ba loại này, ngoài việc tăng dung lượng lưu trữ khi sử dụng loại đệm trống và một vài chu kỳ CPU bổ sung để kiểm tra độ dài khi lưu trữ vào cột bị giới hạn độ dài. Mặc dù character(n) có lợi thế về hiệu suất trong một số hệ thống cơ sở dữ liệu khác, nhưng không có lợi thế như vậy trong PostgreSQL; . Trong hầu hết các tình huống, nên sử dụng text hoặc character varying(n1 để thay thế

Tham khảo để biết thông tin về cú pháp của chuỗi ký tự và tham khảo Chương 9 để biết thông tin về các toán tử và hàm có sẵn

Ví dụ 8. 1. Sử dụng các loại ký tự

CREATE TABLE test1 (a character(4));
INSERT INTO test1 VALUES ('ok');
SELECT a, char_length(a) FROM test1; -- (1)

  a   | char_length
------+-------------
 ok   |           2


CREATE TABLE test2 (b varchar(5));
INSERT INTO test2 VALUES ('ok');
INSERT INTO test2 VALUES ('good      ');
INSERT INTO test2 VALUES ('too long');
ERROR:  value too long for type character varying(5)
INSERT INTO test2 VALUES ('too long'::varchar(5)); -- explicit truncation
SELECT b, char_length(b) FROM test2;

   b   | char_length
-------+-------------
 ok    |           2
 good  |           5
 too l |           5

Có hai loại ký tự có độ dài cố định khác trong PostgreSQL, được hiển thị trong. Chúng không dành cho mục đích sử dụng chung, chỉ để sử dụng trong danh mục hệ thống nội bộ. Loại char(n1 được sử dụng để lưu trữ số nhận dạng. Độ dài của nó hiện được xác định là 64 byte (63 ký tự có thể sử dụng cộng với dấu kết thúc) nhưng phải được tham chiếu bằng cách sử dụng hằng số char(n2 trong mã nguồn varchar(n8. Độ dài được đặt tại thời điểm biên dịch (và do đó có thể điều chỉnh cho các mục đích sử dụng đặc biệt); . Loại char(n4 (lưu ý các dấu ngoặc kép) khác với loại char(n5 ở chỗ nó chỉ sử dụng một byte dung lượng lưu trữ và do đó chỉ có thể lưu trữ một ký tự ASCII. Nó được sử dụng trong danh mục hệ thống như một kiểu liệt kê đơn giản

Bảng 8. 5. Các loại ký tự đặc biệt

TênKích thước lưu trữMô tảchar(n41 byteloại bên trong một bytechar(n164byteloại bên trong cho tên đối tượng