Ở kiếp trước thật dễ dàng trong MySQL. Cả hai loại CHAR và VARCHAR đều có nghĩa giống nhau, chỉ khác biệt về ý nghĩa của độ dài hàng cố định hoặc động được sử dụng. Dấu cách đã bị xóa trong cả hai trường hợp
Với MySQL5. 0 tuy nhiên mọi thứ đã thay đổi nên bây giờ VARCHAR giữ khoảng trắng ở cuối trong khi các cột CHAR không còn nữa. Trên thực tế, các cột CHAR được đệm đến hết chiều dài bằng khoảng trắng nhưng nó vô hình vì các khoảng trắng ở cuối đó bị xóa khi truy xuất. Đây là thứ bạn cần xem cả khi nâng cấp lên MySQL 5. 0 cũng như thiết kế các ứng dụng của bạn – bạn nên lưu ý nếu bạn nhớ các khoảng trắng ở cuối được lưu trữ khi chọn VARCHAR so với CHAR ngoài độ dài cố định so với các hàng ở mức động và không gian dành cho bộ đếm kích thước cột
Có nhiều thứ thú vị hơn với dấu cách. Khi so sánh xong, các khoảng trắng ở cuối luôn bị xóa, ngay cả khi cột VARCHAR được sử dụng, điều này khá phản trực giác. Vì vậy, “a”=”a”=”a ” cho tất cả các loại cột văn bản – CHAR, VARCHAR, TEXT. BLOB là ngoại lệ, nó sẽ bảo toàn các khoảng trắng ở cuối và sử dụng chúng để so sánh
Bản tóm tắt. hướng dẫn này giới thiệu cho bạn kiểu dữ liệu MySQL
0 và thảo luận về một số tính năng quan trọng củaCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
0Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Giới thiệu về kiểu dữ liệu MySQL VARCHAR
MySQL
0 là chuỗi có độ dài thay đổi có độ dài có thể lên tới 65,535. MySQL lưu trữ giá trịCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
0 dưới dạng tiền tố có độ dài 1 byte hoặc 2 byte cộng với dữ liệu thực tếCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Tiền tố độ dài chỉ định số byte trong giá trị. Nếu một cột yêu cầu ít hơn 255 byte, thì tiền tố độ dài là 1 byte. Trong trường hợp cột yêu cầu nhiều hơn 255 byte, tiền tố độ dài là hai byte độ dài
Tuy nhiên, độ dài tối đa tùy thuộc vào kích thước hàng tối đa [65.535 byte] và bộ ký tự được sử dụng. Điều đó có nghĩa là tổng chiều dài của tất cả các cột phải nhỏ hơn 65.535 byte
Hãy xem một ví dụ
Chúng ta sẽ tạo một bảng mới có hai cột
4 vàCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
5 với độ dài là 32765[+2 cho tiền tố độ dài] và 32766 [+2]. Lưu ý rằng 32765+2+32766+2=65535, là kích thước hàng tối đaCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test [ s1 VARCHAR[32765] NOT NULL, s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Câu lệnh tạo bảng thành công. Tuy nhiên, nếu chúng tôi tăng độ dài của cột
4 lên 1Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
MySQL sẽ đưa ra thông báo lỗi
Code language: JavaScript [javascript]
Error Code: 1118. 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 0.000 sec
Như bạn có thể thấy, kích thước hàng quá lớn và câu lệnh không thành công
Nếu bạn chèn một chuỗi có độ dài lớn hơn độ dài của cột
0, MySQL sẽ báo lỗi. Xem xét ví dụ sauCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
1Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Trong ví dụ này, MySQL đưa ra thông báo lỗi sau
2Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
MySQL VARCHAR và không gian
MySQL không đệm không gian khi nó lưu trữ các giá trị
0. Ngoài ra, MySQL giữ lại các khoảng trắng ở cuối khi nó chèn hoặc chọn các giá trịCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
0. Xem ví dụ sauCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
5_______16Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Tuy nhiên, MySQL sẽ cắt bớt các khoảng trắng ở cuối khi chèn một giá trị
0 có chứa các khoảng trắng ở cuối khiến độ dài cột vượt quá. Ngoài ra, MySQL đưa ra một cảnh báo. Hãy xem ví dụ sauCode language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
8Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Câu lệnh này chèn một chuỗi có độ dài là 4 vào cột
1. MySQL vẫn chèn chuỗi, tuy nhiên, nó cắt bớt khoảng trắng ở cuối trước khi chèn giá trịCode language: JavaScript [javascript]
Error Code: 1118. 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 0.000 sec
0Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Bạn có thể xác minh nó bằng cách sử dụng truy vấn sau
1Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;
Trong hướng dẫn này, bạn đã học cách sử dụng kiểu dữ liệu MySQL
0 để lưu trữ các chuỗi biến trong cơ sở dữ liệu.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE IF NOT EXISTS varchar_test_2 [ s1 VARCHAR[32766] NOT NULL, -- error s2 VARCHAR[32766] NOT NULL ] CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;