Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có gì mới không còn varchar (255)

Bạn đang đề cập đến "quy tắc VARCHAR (255)" nào?

Mỗi nhà cung cấp cơ sở dữ liệu có thể tự do triển khai VARCHAR theo cách họ muốn. Các quy tắc (và nguyên tắc) cho VARCHAR không nhất thiết phải giống nhau cho mọi cơ sở dữ liệu.

Về tiêu chuẩn SQL, tôi chưa thực sự xem xét nó. Nó có thể khá lỏng lẻo, vì vậy tất cả các triển khai VARCHAR đều được thấy là tuân thủ tiêu chuẩn. Nếu tiêu chuẩn SQL cho VARCHAR thực sự nghiêm ngặt, thì các nhà cung cấp DBMS có thể mở rộng tiêu chuẩn hoặc có thể không tuân thủ. Tôi không nghĩ rằng tiêu chuẩn thực tế lại quan trọng nhiều. Điều quan trọng là các quy tắc thực tế được thực thi bởi DBMS.

Theo hướng dẫn chung, hãy chỉ định độ dài VARCHAR đủ dài để hỗ trợ các yêu cầu hệ thống. Nếu yêu cầu của hệ thống là không cho phép nhiều hơn 200 ký tự, thì tôi sẽ chỉ định độ dài là VARCHAR(200) .

Như một hướng dẫn chung khác, không xác định độ dài VARCHAR lớn hơn độ dài cần thiết. Các cột VARCHAR được khai báo dài hơn mức cần thiết có thể ảnh hưởng đến tài nguyên và hiệu suất.

Giới hạn Oracle cho độ dài VARCHAR là 4000 ký tự. (Trong các phiên bản trước của Oracle, tối đa là 2000. Nếu bạn cần nhiều hơn 4000 ký tự, thì bạn có thể sử dụng CLOB kiểu dữ liệu.

SQL Server giới hạn đến VARCHAR(8000) , trừ khi bạn chỉ định VARCHAR(MAX) cho phép kích thước tối đa (tính bằng byte) là 2 ^ 32-1.

MySQL có giới hạn là 65,535 đối với giới hạn độ dài hàng tối đa. Vì vậy, điều đó giới hạn hiệu quả kích thước của VARCHAR thành VARCHAR (21844), nếu sử dụng bộ ký tự nhiều byte như utf8. Với một bộ ký tự byte đơn (như latin1), giá trị tối đa sẽ là VARCHAR (65532). Nếu bạn cần nhiều ký tự hơn thế hoặc bạn gặp phải giới hạn về độ dài hàng tối đa, bạn có thể sử dụng kiểu dữ liệu TEXT thay vì VARCHAR.

Hầu hết các triển khai VARCHAR của DBMS đều lưu trữ trường "độ dài" cho cột VARCHAR, cùng với giá trị. độ dài được lưu trữ dưới dạng số nguyên.

Trong một số DBMS, nếu độ dài tối đa (tính bằng byte) của cột VARCHAR không vượt quá 255 byte, trường độ dài có thể được triển khai dưới dạng một số nguyên byte đơn. Nếu cột cho phép nhiều hơn 255 byte, thì trường độ dài phải lớn hơn một byte đơn.

Với các định dạng hàng động, về lưu trữ hàng, lưu trữ 10 ký tự trong một cột, không thực sự quan trọng nếu cột được định nghĩa là VARCHAR (30) hoặc VARCHAR (1000). Với các định dạng hàng cố định, không gian cho độ dài tối đa của cột sẽ được dành riêng. Định dạng cho kho lưu trữ hàng sẽ phụ thuộc vào DBMS và trong một số trường hợp (MySQL) vào công cụ lưu trữ và định dạng hàng được chỉ định.

Vâng, đó là năm 2016. Và chúng tôi đã đi một chặng đường dài kể từ khi giới thiệu hệ thống cơ sở dữ liệu quan hệ thương mại đầu tiên.

Cơ sở dữ liệu chỉ là một phần của hệ thống. Có thể có giới hạn trong ứng dụng hoặc các thành phần phần mềm khác. (Nếu ứng dụng được viết bằng C và ứng dụng đang xác định cấu trúc với mảng byte cho trường, giới hạn về kích thước ở đó sẽ rất quan trọng. Việc tăng kích thước cho phép trong cơ sở dữ liệu sẽ không tự động sửa ứng dụng .

Cũng có thể có giới hạn / giới hạn độ dài trong mã Javascript hoặc trong các phần tử HTML của một trang web. Hoặc có thể có những hạn chế của các thành phần phần mềm khác. Ví dụ:một số trình điều khiển ODBC SQL Server thực sự cũ có giới hạn 255 ký tự (byte?) Cho cả cột CHAR và VARCHAR.

Vì vậy, độ dài của một VARCHAR trong cơ sở dữ liệu chỉ là một phần của câu chuyện.

Với tất cả những điều đã nói, tôi vẫn không hiểu bạn muốn nói gì khi bạn hỏi

Chúng ta có thể phá vỡ quy tắc VARCHAR (255) không?

Tôi tự hỏi bạn đang đề cập đến "quy tắc" nào. Trong hầu hết mọi cơ sở dữ liệu mà tôi biết, có thể xác định các cột VARCHAR dài hơn 255 byte hoặc 255 ký tự. Và làm điều đó không vi phạm bất kỳ quy tắc nào.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để MySQL nhận biết được các ký tự nhiều byte trong LIKE và REGEXP?

  2. Hai cột làm khóa chính trong mysql?

  3. Bật chế độ nhị phân trong khi khôi phục Cơ sở dữ liệu từ kết xuất SQL

  4. Sphinx và ý bạn là ...? đề xuất ý tưởng. Nó có hoạt động không?

  5. Thay thế cho việc sử dụng Câu lệnh chuẩn bị sẵn trong Trình kích hoạt với MySQL