Hướng dẫn to char mysql - để ký tự mysql

11.3.2 & nbsp; các loại char và varchar

Các loại CHARVARCHAR là tương tự nhau, nhưng khác nhau về cách chúng được lưu trữ và truy xuất. Chúng cũng khác nhau về chiều dài tối đa và trong việc có được giữ lại không gian dấu vết hay không.

Các loại CHARVARCHAR được khai báo với độ dài cho biết số lượng ký tự tối đa bạn muốn lưu trữ. Ví dụ, CHAR(30) có thể chứa tối đa 30 ký tự.

Độ dài của cột CHAR được cố định theo độ dài mà bạn khai báo khi bạn tạo bảng. Độ dài có thể là bất kỳ giá trị nào từ 0 đến 255. Khi các giá trị CHAR được lưu trữ, chúng được gắn bên phải với khoảng trống theo độ dài được chỉ định. Khi các giá trị CHAR được truy xuất, các không gian dấu vết được gỡ bỏ trừ khi chế độ PAD_CHAR_TO_FULL_LENGTH SQL được bật.

Các giá trị trong các cột VARCHAR là các chuỗi có độ dài thay đổi. Độ dài có thể được chỉ định là giá trị từ 0 đến 65,535. Độ dài tối đa hiệu quả của VARCHAR phải tuân theo kích thước hàng tối đa (65,535 byte, được chia sẻ giữa tất cả các cột) và bộ ký tự được sử dụng. Xem Phần & NBSP; 8.4.7, Giới hạn trên số đếm cột và kích thước hàng.

Trái ngược với CHAR, các giá trị VARCHAR được lưu trữ dưới dạng tiền tố chiều dài 1 byte hoặc 2 byte cộng với dữ liệu. Tiền tố độ dài biểu thị số byte trong giá trị. Một cột sử dụng một byte chiều dài nếu các giá trị yêu cầu không quá 255 byte, hai byte độ dài nếu các giá trị có thể yêu cầu nhiều hơn 255 byte.

Nếu chế độ SQL nghiêm ngặt không được bật và bạn gán giá trị cho cột CHAR hoặc VARCHAR vượt quá độ dài tối đa của cột, giá trị bị cắt ngắn để phù hợp và cảnh báo được tạo ra. Đối với việc cắt ngắn các ký tự không gian không gian, bạn có thể gây ra lỗi xảy ra (thay vì cảnh báo) và triệt tiêu chèn giá trị bằng cách sử dụng chế độ SQL nghiêm ngặt. Xem Phần & NBSP; 5.1.11, Chế độ SQL Server SQL.

Đối với các cột VARCHAR, các khoảng trắng vượt quá chiều dài cột được cắt ngắn trước khi chèn và cảnh báo được tạo ra, bất kể chế độ SQL đang sử dụng. Đối với các cột CHAR, việc cắt các khoảng trống vượt quá từ các giá trị được chèn được thực hiện âm thầm bất kể chế độ SQL.

Các giá trị VARCHAR không được đệm khi chúng được lưu trữ. Không gian dấu vết được giữ lại khi các giá trị được lưu trữ và truy xuất, phù hợp với SQL tiêu chuẩn.

Bảng sau đây minh họa sự khác biệt giữa CHARVARCHAR bằng cách hiển thị kết quả của việc lưu trữ các giá trị chuỗi khác nhau vào các cột VARCHAR1 và VARCHAR2 (giả sử rằng cột sử dụng một ký tự một byte như VARCHAR3).

Giá trịVARCHAR1Cần lưu trữVARCHAR2Cần lưu trữ
VARCHAR6VARCHAR74 byteVARCHAR61 byte
VARCHAR9CHAR04 byteVARCHAR61 byte
CHAR2CHAR04 byteCHAR0VARCHAR9
CHAR5CHAR04 byteCHAR0VARCHAR9

3 byteonly when not using strict SQL mode; if strict mode is enabled, values that exceed the column length are not stored, and an error results.

CHAR2

5 byte

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO vc VALUES ('ab  ', 'ab  ');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (ab  )              | (ab)                |
+---------------------+---------------------+
1 row in set (0.06 sec)

Các giá trị được hiển thị như được lưu trữ trong hàng cuối cùng của bảng chỉ áp dụng khi không sử dụng chế độ SQL nghiêm ngặt; Nếu chế độ nghiêm ngặt được bật, các giá trị vượt quá độ dài cột không được lưu trữ và kết quả lỗi.

CHAR8 mã hóa các trường có độ dài cố định lớn hơn hoặc bằng 768 byte theo chiều dài như các trường có độ dài thay đổi, có thể được lưu trữ ngoài trang. Ví dụ, cột CHAR9 có thể vượt quá 768 byte nếu độ dài byte tối đa của bộ ký tự lớn hơn 3, như với VARCHAR0.

Nếu một giá trị nhất định được lưu trữ vào các cột VARCHAR1 và VARCHAR2, các giá trị được lấy từ các cột không phải lúc nào cũng giống nhau vì các không gian dấu vết được loại bỏ khỏi các cột CHAR khi truy xuất. Ví dụ sau đây minh họa sự khác biệt này:

Các giá trị trong các cột CHAR, VARCHARVARCHAR6 được sắp xếp và so sánh theo đối chiếu bộ ký tự được gán cho cột.

Đối với những trường hợp các ký tự pad bị tước hoặc so sánh bỏ qua chúng, nếu một cột có một chỉ mục yêu cầu các giá trị duy nhất, việc chèn vào các giá trị cột chỉ khác nhau về số lượng ký tự pad kéo theo lỗi khóa trùng lặp.Ví dụ: nếu một bảng chứa CHAR(30)7, một nỗ lực lưu trữ CHAR(30)8 gây ra lỗi khóa trùng lặp.