2010-07-28 12 views

Odpowiedz

453

Różnica polega na sposobie przekonwertowania symbolu na jego odpowiedni typ kolumny w języku zapytań.

z MySQL: string jest odwzorowywany na 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) 

referencyjny:

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

Kiedy należy użyć każdego z nich?

Zgodnie z ogólną regułą, należy :string dla wejścia krótki tekst (nazwa użytkownika, adres e-mail, hasło, tytuły, etc.) i używać :text dłużej oczekiwanego wejścia, takie jak opisy, treść komentarza, itp

+9

Myślę, że lepszą zasadą jest zawsze używać ': text'. Zobacz http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/ –

+61

Dla MySQL - nie tak dużo, możesz mieć indeksy na varcharach, nie możesz na tekście . –

+9

Implementacja PostgreSQL preferuje tekst. Jedyną różnicą w łańcuchu/tekście pg jest ograniczenie długości łańcucha. Brak różnic w wydajności. – wurde

17

Ciąg tłumaczy się na "Varchar" w bazie danych, a tekst tłumaczy na "tekst". Varchar może zawierać znacznie mniej elementów, tekst może być (prawie) dowolnej długości.

Dla dogłębnej analizy z dobrymi referencjami sprawdzić http://www.pythian.com/news/7129/text-vs-varchar/

Edycja: Niektóre silniki bazodanowe może załadować varchar za jednym zamachem, ale sklep tekst (i blob) poza stół. A SELECT name, amount FROM products może być wolniejszy, gdy używasz text dla name niż podczas korzystania z varchar. A ponieważ Railsy domyślnie ładują rekordy z SELECT * FROM... Twoje kolumny tekstowe będą ładowane. Prawdopodobnie nie będzie to jednak prawdziwy problem w twojej lub mojej aplikacji (wstępna optymalizacja to ...). Ale dobrze wiedzieć, że tekst nie zawsze jest "wolny".

138

Jeśli używasz postgres używanie tekstu gdziekolwiek można, chyba że masz ograniczenie rozmiaru, ponieważ nie ma kary wydajność dla tekstu vs varchar

nie ma różnicy wydajności między tymi trzema typami, oprócz zwiększonej przestrzeni dyskowej przy użyciu typ z pustą wyściółką i kilka dodatkowych cykli procesora, aby sprawdzić długość whe ■ Przechowywanie w ograniczonej długości kolumnie. Podczas gdy postać (n) ma zalety wydajnościowe w niektórych innych systemach baz danych, nie ma takiej korzyści w PostgreSQL; w rzeczywistości charakter (n) jest zwykle najwolniejszy z trzech ze względu na dodatkowe koszty przechowywania. W większości przypadków tekst lub znak zmieniając powinien być stosowany zamiast

PostsgreSQL manual

+4

Jednak w interesie bycia agnostykiem bazy danych jest to najlepsze podejście? Co jeśli chcesz zmienić bazę danych? Udzielam, w realnym świecie, że nie zdarza się tak często, ale nadal ... jeśli nie ma "różnicy w wydajności", dlaczego nie trzymać się oczekiwanego użycia ciągu dla krótkich rzeczy i tekstu na dłuższe rzeczy? A biorąc pod uwagę własne ciągi indeksowania komentarzy, nadal wydaje się najlepszym podejściem. –

+6

Istnieje wiele powodów, dla których może się to okazać konieczne w świecie rzeczywistym, w którym najlepiej jest rzucić myśl, że istnieje Jedno Prawdziwe Rozwiązanie każdego problemu. –

+13

Może tak jest, ale agnostycyzm w bazie danych jest fałszywym prorokiem. –

10

Jak wyjaśniono powyżej, nie tylko typ danych db będzie również wpływać na stanowisku, że zostanie wygenerowany, jeśli są rusztowania. ciąg spowoduje wygenerowanie tekstu pola tekstowego spowoduje wygenerowanie text_area

10

Łańcuch, jeśli rozmiar jest stały i mały, a tekst jest zmienny i duży. Jest to ważne, ponieważ tekst jest znacznie większy niż ciągi znaków. Zawiera o wiele więcej kilobajtów.

Tak więc dla małych pól zawsze używaj łańcucha (varchar). Pola takie jak. first_name, login, e-mail, temat (artykułu lub posta) oraz przykład tekstów: treść/treść postu lub artykułu. Pola do ust itp

rozmiar String 1 do 255 (domyślnie = 255)

Rozmiar tekstu 1 do 4294967296 (domyślnie = 65536) 2

1

Zastosowanie ciąg na krótszym dziedzinie, podobnie jak nazwiska, adres, telefon, firma

Użyj tekstu w celu uzyskania większej zawartości, komentarzy, treści, akapitów.

Moja ogólna zasada, jeśli jest to coś więcej niż jedna linia, zwykle szukam tekstu, jeśli jest to krótkie 2-6 słów, idę na ciąg.

Oficjalna reguła to 255 dla ciągu. Tak więc, jeśli twój ciąg ma więcej niż 255 znaków, przejdź do tekstu.

Powiązane problemy