Tôi đang tạo một ứng dụng web mới bằng cách sử dụng Rails và tự hỏi sự khác biệt giữa string
và text
là gì? Và khi nào thì nên sử dụng?Sự khác biệt giữa chuỗi và văn bản trong đường ray?
Trả lời
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:
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
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.
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
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. –
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. –
Đ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ả. –
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
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
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.
- 1. Đường ray 3: Sự khác biệt giữa Relation.count và Relation.all.count
- 2. XPath - Sự khác biệt giữa nút() và văn bản()
- 3. Sự khác biệt giữa 'nội dung' và 'văn bản'
- 4. Sự khác biệt giữa kiểu dữ liệu "Văn bản" và "Chuỗi" trong SQLite
- 5. sự khác biệt giữa char * và chuỗi
- 6. Sự khác biệt giữa AbstractController và ActionController trong đường ray 4
- 7. Sự khác biệt giữa self.up và di chuyển trong đường ray
- 8. Sự khác biệt giữa tài nguyên và tài nguyên trong định tuyến đường ray?
- 9. Sự khác biệt giữa = và: =
- 10. Sự khác biệt giữa và
- 11. Sự khác biệt giữa getString() và getResources.getString()
- 12. Sự khác biệt giữa ". +" Và ". +?"
- 13. Sự khác biệt giữa việc sử dụng `máy chủ đường ray` và` rackup` là gì?
- 14. sự khác biệt giữa 'và "trong JavaScript?
- 15. Sự khác biệt giữa mẫu và đường dẫn là gì?
- 16. Sự khác biệt giữa '.' và "." trong java
- 17. Đường ray: có sự khác biệt giữa 'tham chiếu: foo' và 'số nguyên: foo_id' không?
- 18. Sự khác biệt về đường ray giữa mới + lưu và tạo
- 19. Sự khác biệt giữa fgets và fscanf?
- 20. Sự khác biệt giữa textMultiLine và textLongMessage
- 21. Sự khác biệt giữa! và !! trong yaml?
- 22. Sự khác biệt giữa $ * và $ @
- 23. Sự khác biệt giữa HashMap và Bản đồ trong Java ..?
- 24. Sự khác biệt giữa getApplicationContext và classname.this
- 25. sự khác biệt cơ bản giữa elseif và khác nếu
- 26. Sự khác biệt giữa BufferedReader và BufferedInputStream
- 27. Sự khác biệt giữa. và #
- 28. Sự khác biệt giữa $ (...) và `...`
- 29. Sự khác biệt giữa "**/* /" và "** /"?
- 30. Sự khác biệt giữa quét và khớp trên chuỗi Ruby
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/ –
Đố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 . –
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