Tworzę nową aplikację internetową przy użyciu Railsów i zastanawiałem się, jaka jest różnica między string
i text
? A kiedy należy z nich korzystać?
ruby-on-rails
Mo.
źródło
źródło
:text
. Patrz depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-texttrue
w varchar (pole ergo,string
type) w MySQL serializuje wartość do1
(co jest całkowicie uczciwe). Jednak wtext
typie zapisanie wartości „true” kończy się szeregowaniem jej jako pojedynczego znakut
. Migrowałem kolumnę, nie zdając sobie z tego sprawy, i wszystkie przyszłe wiersze, w których wartość jest prawdziwa, są terazt
. Czy ktoś ma wgląd w to zachowanie?Jeśli korzystasz z Postgres, używaj tekstu gdziekolwiek możesz, chyba że masz ograniczenie rozmiaru, ponieważ nie ma ograniczenia wydajności dla tekstu w porównaniu z varchar
Podręcznik PostsgreSQL
źródło
text
przez(n)
typy danych są przekonujące, ale argument za korzystanietext
przezvarchar
nie. Mówi, że są takie same, ale woli,text
ponieważvarchar
można go pomylićvarchar(n)
i ponieważtext
jest mniej znaków do pisania. Aletext
zamiast tegovarchar
tracisz kontekst, że przechowywane dane nie powinny być długie. Na przykład przechowywanie nazwy użytkownikatext
wydaje mi się mylące.Łańcuch przekłada się na „Varchar” w bazie danych, podczas gdy tekst tłumaczy się na „tekst”. Varchar może zawierać znacznie mniej elementów, tekst może mieć (prawie) dowolną długość.
Aby uzyskać dogłębną analizę z dobrymi referencjami, sprawdź http://www.pythian.com/news/7129/text-vs-varchar/
Edycja: Niektóre silniki baz danych mogą być ładowane
varchar
za jednym razem, ale przechowują tekst (i obiekt blob) poza tabelą.SELECT name, amount FROM products
Mogłaby być o wiele wolniej podczas korzystaniatext
zname
niż podczas używaniavarchar
. A ponieważ Railsy domyślnieSELECT * FROM...
ładują rekordy z kolumnami tekstowymi, zostaną załadowane. Prawdopodobnie nigdy nie będzie to prawdziwym problemem w Twojej lub mojej aplikacji (przedwczesna optymalizacja to ...). Ale dobrze wiedzieć, że tekst nie zawsze jest „darmowy”.źródło
Ciąg, jeśli rozmiar jest stały i mały, a tekst, jeśli jest zmienny i duży. Jest to trochę ważne, ponieważ tekst jest znacznie większy niż napisy. Zawiera znacznie więcej kilobajtów.
Dlatego w przypadku małych pól zawsze używaj łańcucha (varchar). Pola takie jak. imię, login, adres e-mail, temat (artykułu lub postu) i przykład tekstów: treść / treść postu lub artykułu. pola na akapity itp
Rozmiar łańcucha od 1 do 255 (domyślnie = 255)
Rozmiar tekstu od 1 do 4294967296 (domyślnie = 65536) 2
źródło
Jak wyjaśniono powyżej, nie tylko typ danych db wpłynie również na widok, który zostanie wygenerowany podczas rusztowania. łańcuch wygeneruje pole tekstowe tekst wygeneruje obszar tekstowy
źródło
Użyj ciągu dla krótszych pól, takich jak nazwiska, adres, telefon, firma
Użyj Tekstu dla większych treści, komentarzy, treści, akapitów.
Zasadą ogólną jest to, że jeśli jest to coś więcej niż jedna linia, zazwyczaj wybieram tekst, jeśli jest to 2-6 słów, wybieram ciąg znaków.
Oficjalna reguła to 255 dla ciągu. Jeśli więc ciąg ma więcej niż 255 znaków, przejdź do tekstu.
źródło
Jeśli używasz oracle ...
STRING
zostanie utworzony jakoVARCHAR(255)
kolumna iTEXT
jakoCLOB
.https://github.com/rsim/oracle-enhanced/blob/master/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb
źródło
Przyjęta odpowiedź jest niesamowita, właściwie wyjaśnia różnicę między ciągiem a tekstem (głównie w limicie rozmiaru bazy danych, ale istnieje kilka innych błędów), ale chciałem wskazać na mały problem, który pomógł mi przejść przez tę odpowiedź nie zrobiłem tego całkowicie dla mnie.
Maksymalny rozmiar : limit => 1 do 4294967296 nie działał dokładnie tak, jak podano, musiałem przejść -1 z tego maksymalnego rozmiaru. Przechowuję duże obiekty BLS JSON i czasami mogą być szalone ogromne.
Oto moja migracja z większą wartością i wartością, na którą MySQL nie narzeka.
Uwaga 5 na końcu limitu zamiast 6
źródło
Jeśli atrybut jest zgodny
f.text_field
z formularzem, użyj ciągu znaków , jeśli jest zgodny,f.text_area
użyj tekstu .źródło