2010-07-28 23 views

Trả lời

453

Sự khác biệt dựa vào cách biểu tượng được chuyển đổi thành loại cột tương ứng trong ngôn ngữ truy vấn.

với MySQL: string được ánh xạ tới VARCHAR (255) - http://guides.rubyonrails.org/migrations.html

:string |     VARCHAR    | :limit => 1 to 255 (default = 255) 
:text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536) 

tham khảo:

http://www.packtpub.com/article/Working-with-Rails-ActiveRecord-Migrations-Models-Scaffolding-and-Database-Completion

Khi nào thì nên sử dụng?

Như một quy luật chung của ngón tay cái, sử dụng :string để nhập văn bản ngắn (username, email, mật khẩu, tiêu đề, vv) và sử dụng :text cho đầu vào còn dự kiến ​​như giới thiệu, nội dung bình luận vv

+9

Tôi nghĩ nguyên tắc chung hơn là luôn sử dụng ': văn bản'. Xem http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ –

+61

Đối với MySQL - không quá nhiều, bạn có thể có chỉ mục trên varchars, bạn không thể trên văn bản . –

+9

Triển khai PostgreSQL thích văn bản hơn. Sự khác biệt duy nhất cho chuỗi/văn bản pg là hạn chế về độ dài của chuỗi. Không có sự khác biệt về hiệu suất. – wurde

17

Chuỗi dịch thành "Varchar" trong cơ sở dữ liệu của bạn, trong khi văn bản dịch thành "văn bản". Một varchar có thể chứa các mục ít hơn, một văn bản có thể có (gần như) bất kỳ độ dài nào.

Đối với một phân tích sâu với sự tham khảo tốt kiểm tra http://www.pythian.com/news/7129/text-vs-varchar/

Edit: Một số công cụ cơ sở dữ liệu có thể tải varchar trong một đi, nhưng cửa hàng văn bản (và blob) bên ngoài của bảng. A SELECT name, amount FROM products có thể, chậm hơn rất nhiều khi sử dụng text cho name so với khi bạn sử dụng varchar. Và kể từ Rails, theo mặc định tải các bản ghi với SELECT * FROM... các cột văn bản của bạn sẽ được tải. Điều này có thể sẽ không bao giờ là một vấn đề thực sự trong ứng dụng của bạn hoặc của tôi, mặc dù (Tối ưu hóa sớm là ...). Nhưng biết rằng văn bản không phải lúc nào cũng "tự do" là điều tốt để biết.

138

Nếu bạn đang sử dụng postgres sử dụng văn bản ở bất cứ nơi nào bạn có thể, trừ khi bạn có giới hạn về kích thước vì không có hình phạt về hiệu suất cho văn bản vs varchar

Không có sự khác biệt về hiệu suất giữa ba loại này, ngoài việc tăng dung lượng lưu trữ khi sử dụng loại đệm trống và một vài chu kỳ CPU phụ để kiểm tra độ dài của whe n lưu trữ vào cột bị giới hạn độ dài. Trong khi ký tự (n) có lợi thế về hiệu suất trong một số hệ thống cơ sở dữ liệu khác, thì không có lợi thế như vậy trong PostgreSQL; trong thực tế, ký tự (n) thường là chậm nhất trong ba vì chi phí lưu trữ bổ sung của nó. Trong hầu hết các tình huống văn bản hoặc ký tự khác nhau nên được sử dụng thay

PostsgreSQL manual

+4

Nhưng trong quan tâm là cơ sở dữ liệu bất khả tri, đây có phải là cách tiếp cận tốt nhất? Nếu bạn muốn thay đổi cơ sở dữ liệu thì sao? Tôi cấp, trong thế giới thực không xảy ra thường xuyên, nhưng vẫn ... nếu có 'không có sự khác biệt về sự khác biệt' thì tại sao lại không dính vào việc sử dụng chuỗi cho những điều ngắn và văn bản cho những thứ dài hơn? Và đưa ra các chuỗi chỉ mục bình luận của riêng bạn, vẫn có vẻ là cách tiếp cận tốt nhất. –

+6

Có một số lý do tại sao nó có thể trở nên cần thiết trong thế giới thực, nơi tốt nhất là làm sáng tỏ quan niệm rằng có một giải pháp thực sự cho bất kỳ vấn đề nào. –

+13

Điều đó có thể như vậy, nhưng cơ sở dữ liệu thuyết bất khả tri là một tiên tri giả. –

10

Như đã giải thích ở trên không chỉ là kiểu dữ liệu db nó cũng sẽ ảnh hưởng đến quan điểm cho rằng sẽ được tạo ra nếu bạn là giàn giáo. chuỗi sẽ tạo ra văn bản text_field sẽ tạo ra một text_area

10

Chuỗi nếu kích thước cố định và nhỏ và văn bản nếu nó biến đổi và lớn. Điều này quan trọng vì văn bản lớn hơn dây. Nó chứa rất nhiều kilobyte.

Vì vậy, đối với các trường nhỏ luôn sử dụng chuỗi (varchar). Các lĩnh vực như thế nào. first_name, đăng nhập, email, chủ đề (của một bài báo hoặc bài viết) và ví dụ về văn bản: nội dung/nội dung của bài đăng hoặc bài viết. lĩnh vực cho đoạn văn vv

Chuỗi kích thước 1-255 (mặc định = 255)

Text size 1-4294967296 (mặc định = 65536) 2

1

Sử dụng chuỗi cho lĩnh vực ngắn hơn, như tên, địa chỉ, điện thoại, công ty

Sử dụng Văn bản để có nội dung, nhận xét, nội dung, đoạn văn lớn hơn.

Quy tắc chung của tôi, nếu đó là nội dung có nhiều dòng, tôi thường tìm văn bản, nếu đó là từ ngắn 2-6, tôi sẽ tìm chuỗi.

Quy tắc chính thức là 255 cho chuỗi. Vì vậy, nếu chuỗi của bạn có nhiều hơn 255 ký tự, hãy tìm văn bản.

Các vấn đề liên quan