Tương đương với varchar (max) trong MySQL là gì?
Tương đương với varchar (max) trong MySQL là gì?
Câu trả lời:
Độ dài tối đa của một varchar tùy thuộc vào kích thước hàng tối đa trong MySQL, là 64KB (không tính BLOB):
VARCHAR(65535)
Tuy nhiên, lưu ý rằng giới hạn thấp hơn nếu bạn sử dụng bộ ký tự nhiều byte:
VARCHAR(21844) CHARACTER SET utf8
Dưới đây là một số ví dụ:
Kích thước hàng tối đa là 65535, nhưng một varchar cũng bao gồm một hoặc hai byte để mã hóa độ dài của một chuỗi đã cho. Vì vậy, bạn thực sự không thể khai báo một biến thể của kích thước hàng tối đa, ngay cả khi đó là cột duy nhất trong bảng.
mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Nhưng nếu chúng ta thử giảm độ dài, chúng ta sẽ tìm thấy độ dài lớn nhất hoạt động:
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
Bây giờ nếu chúng ta cố gắng sử dụng bộ ký tự đa bào ở cấp độ bảng, chúng ta thấy rằng nó tính mỗi ký tự là nhiều byte. Các chuỗi UTF8 không nhất thiết phải sử dụng nhiều byte cho mỗi chuỗi, nhưng MySQL không thể cho rằng bạn sẽ hạn chế tất cả các lần chèn trong tương lai của mình thành các ký tự một byte.
mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead
Mặc dù lỗi cuối cùng đã nói với chúng tôi, InnoDB vẫn không giống như chiều dài 21845.
mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Điều này có ý nghĩa hoàn hảo, nếu bạn tính toán rằng 21845 * 3 = 65535, dù sao thì nó cũng không hoạt động. Trong khi đó 21844 * 3 = 65532, không hoạt động.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
giá trị cho cột. Không thể làm điều đó với các loại văn bản hoặc BLOB.
TEXT
giới hạn độ dài là 64K. MEDIUMTEXT
giới hạn chiều dài là 16M. LONGTEXT
giới hạn chiều dài là 4G.
varchar(max)
loại cột của Sql Server .
TLDR; MySql không có khái niệm tương đương varchar(max)
, đây là một tính năng của MS SQL Server.
varchar(max)
là một tính năng của Microsoft SQL Server.
Lượng dữ liệu mà một cột có thể lưu trữ trong các phiên bản máy chủ Microsoft SQL trước phiên bản 2005 được giới hạn ở 8KB. Để lưu trữ nhiều hơn 8KB bạn sẽ phải sử dụng TEXT
, NTEXT
hoặc BLOB
cột loại, các loại cột lưu trữ dữ liệu của họ như một bộ sưu tập của 8K trang tách biệt với các trang bảng dữ liệu; họ hỗ trợ lưu trữ tối đa 2GB mỗi hàng.
Thông báo trước lớn cho các loại cột là họ thường yêu cầu chức năng đặc biệt và báo cáo để truy cập và sửa đổi dữ liệu (ví dụ READTEXT
, WRITETEXT
và UPDATETEXT
)
Trong SQL Server 2005, varchar(max)
đã được giới thiệu để thống nhất dữ liệu và truy vấn được sử dụng để truy xuất và sửa đổi dữ liệu trong các cột lớn. Dữ liệu cho varchar(max)
các cột được lưu trữ nội tuyến với các trang dữ liệu bảng.
Khi dữ liệu trong cột MAX điền vào trang dữ liệu 8KB, một trang tràn được phân bổ và trang trước đó trỏ đến nó tạo thành một danh sách được liên kết. Không giống như TEXT
, NTEXT
và BLOB
các varchar(max)
loại cột hỗ trợ tất cả các ngữ nghĩa truy vấn tương tự như các loại cột khác.
Vì vậy, varchar(MAX)
thực sự có nghĩa varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
và không varchar(MAX_SIZE_OF_A_COLUMN)
.
Để có được cùng dung lượng lưu trữ như varchar(max)
trong MySql, bạn vẫn cần phải sử dụng BLOB
loại cột. Bài viết này thảo luận về một phương pháp rất hiệu quả để lưu trữ một lượng lớn dữ liệu trong MySql một cách hiệu quả.
varchar(max)
thực sự của nó .
Độ dài tối đa của một varchar là
65535
chia cho độ dài byte tối đa của một ký tự trong bộ ký tự, cột được đặt thành (ví dụ utf8 = 3 byte, ucs2 = 2, latin1 = 1).
trừ 2 byte để lưu trữ độ dài
trừ đi độ dài của tất cả các cột khác
trừ đi 1 byte cho mỗi 8 cột là nullable. Nếu cột của bạn là null / không null, thì cột này được lưu trữ dưới dạng một bit trong một byte / byte được gọi là mặt nạ null, 1 bit cho mỗi cột là null.
thay đổi bảng prg_ar numport_colors thêm Text_Color_Code VARCHAR (tối đa);
thay đổi bảng prg_ar numport_colors thêm Text_Color_Code longtext;
thay đổi bảng prg_ar numport_colors thêm Text_Color_Code CLOB;
Cột chuyển đổi Mysql từ VARCHAR sang văn bản khi có kích thước giới hạn !!!
mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
mysql>