Robię nową aplikację internetową za pomocą Rails i zastanawiałem się, jaka jest różnica między string
i text
? A kiedy należy ich użyć?Różnica między ciągiem a tekstem w szynach?
Odpowiedz
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:
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
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".
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
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. –
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. –
Może tak jest, ale agnostycyzm w bazie danych jest fałszywym prorokiem. –
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
Ł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
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.
- 1. Różnica między tekstem a tekstem w fabricJS
- 2. Różnica między rusztowaniem a modelem w szynach
- 3. Różnica między ciągiem odczytywanie a ciągiem znaków w Clojure
- 4. Różnica między zadeklarowanym ciągiem a przydzielonym łańcuchem
- 5. Android EditText narysuj linię podziału między jej ciągiem a tekstem.
- 6. Różnica w pythonu między ciągiem podstawowym a typami.StringType?
- 7. Jaka jest różnica między ciągiem a symbolem w Ruby?
- 8. Różnica między przechowywaniem ObjectId a jego ciągiem znaków w MongoDB
- 9. Różnica między wartością() i tekstem()
- 10. Jaka jest różnica między używaniem aplikacji/csv a tekstem/csv?
- 11. Jaka jest różnica między tekstem jawnym a danymi binarnymi?
- 12. Jaka jest różnica między ciągiem znaków w kodzie źródłowym a ciągiem odczytanym z pliku?
- 13. jaka jest różnica między ciągiem znaków [] a ciągiem znaków w języku golang?
- 14. Jaka jest różnica między [0] a & a [0] w łańcuchu
- 15. Różnica między tekstem CallSessionContext, ThreadLocalSessionContext i ThreadStaticSessionContext
- 16. HTML - niezłamanie odstępu między tekstem a obrazem
- 17. Różnica między obiektem a *?
- 18. Różnica między jquery a $
- 19. Różnica między ciągiem binarnym, ciągiem bajtowym, ciągiem unicode i zwykłym ciągiem znaków (str)
- 20. Błąd niezgodności typu między java.lang.String a ciągiem
- 21. Różnica między String [] a i String ... a
- 22. Różnica między DataSource a DataSet
- 23. Różnica między mapą a dyktowaniem
- 24. Różnica między systemem a shell_exec
- 25. Różnica między% 5B% a% 5B0%?
- 26. Różnica między wysokością a tłumaczeniemZ
- 27. Różnica między Redis a kafka
- 28. Różnica między content_main.xml a activity_main.xml?
- 29. Różnica między File.Copy a File.Move
- 30. różnica między __u8 a uint8_t
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/ –
Dla MySQL - nie tak dużo, możesz mieć indeksy na varcharach, nie możesz na tekście . –
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