Làm cách nào để thiết lập CODEUNIT32 (CHAR SET = phiên bản UTF-32, trong DDL?


1

Tôi đang cố gắng mô hình hóa một yêu cầu cho một cột sẽ là VARCHAR (120), nhưng thực sự sẽ lưu trữ 480 byte.

Độ dài 480 được thiết lập là VARCHAR (120) = 120 x 4 = 480 byte. Điều này là do đơn vị mã đặc tả đơn vị chuỗi 32. Điều đó có nghĩa là với mỗi 1 ký tự, nó sẽ tiêu tốn 4 byte.

Tôi không chắc chắn về cú pháp cho DDL. Nghiên cứu của tôi chỉ ra rằng cần có một tuyên bố trong quá trình tạo bảng, đặt Bộ ký tự thành UTF-32, nhưng tôi không chắc chắn. Cái này dành cho tầng giữa của DB2 (Không phải máy tính lớn)

Đây là một cái gì đó tôi tìm thấy, nhưng tôi không chắc nó là hợp lệ, cũng như cách thức COLLATEhoạt động.

ALTER TABLE table_name   
MODIFY column_name VARCHAR(255) 
CHARACTER SET utf8 
COLLATE utf8_unicode_ci;

Bất kỳ trợ giúp sẽ được đánh giá cao!

Câu trả lời:


0

Không có cách nào để khai báo các cột loại UTF-32.

Bạn sẽ cần xác định cột là VARCHAR(480), sau đó sử dụng CODEUNITS32 bất cứ khi nào bạn truy cập vào cột, để chuyển cột thành UTF-32.

Ví dụ:

SELECT CHARACTER_LENGTH(NAME,CODEUNITS32) FROM T1 WHERE NAME = 'Jürgen';
SET :POSITION = LOCATE_IN_STRING('Jürgen lives on Hegelstraße','ß',-1,CODEUNITS32);

Một số tài liệu tham khảo của IBM:


-1

Đối với LUW của DB2, chỉ cần khai báo cột là VARCHAR(120 CODEUNITS32). Db2 sẽ lưu trữ dữ liệu dưới dạng UTF-8, chỉ cho phép tối đa 120 ký tự, nhưng sẽ cho phép tối đa 480 byte.

create table T(C VARCHAR(e CODEUNITS32))
insert into t values '€£😃'
select c, hex(c), lengthb(c),length(c) from t

C    2                  3 4
---- ------------------ - -
€£😃 E282ACC2A3F09F9883 9 3

https://www.ibm.com/support/ledgeledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008470.html


Cho ai xuống bầu chọn câu trả lời của tôi. Bạn có thể bình luận tại sao? Là câu trả lời của tôi không chính xác?
Paul Vernon
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.