MySQL türü metin için maksimum uzunluk


437

Özel mesaj göndermek için bir form oluşturuyorum ve MySQL veritabanı tablosundaki maxlengthbir textalanın maksimum uzunluğuna uygun bir textarea değerini ayarlamak istiyorum . Bir metin alanı kaç karakter saklayabilir?

Çok ise, varchar ile yaptığım gibi veritabanı metin türü alanında uzunluk belirleyebilir miyim?


5
Basit bir metin alanına 64k yazmak mı istiyorsunuz? acı ...
Marc B

169
@Marc B Bir kullanıcının büyük miktarda çöpü özel bir kısa mesaj alanına yapıştırma yeteneğini asla küçümsemeyin.
simontemplar

5
Bu yüzden
metin alanı

Yanıtlar:


750

Maksimum sayı için bakın: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

TINYBLOB, TINYTEXT       L + 1 bytes, where L < 2^8    (255 Bytes)
BLOB, TEXT               L + 2 bytes, where L < 2^16   (64 Kilobytes)
MEDIUMBLOB, MEDIUMTEXT   L + 3 bytes, where L < 2^24   (16 Megabytes)
LONGBLOB, LONGTEXT       L + 4 bytes, where L < 2^32   (4 Gigabytes)

L, metin alanınızdaki bayt sayısıdır. Dolayısıyla, metin için maksimum karakter sayısı 2 16 -1'dir (tek baytlık karakterler kullanarak). 65 535 karakter (tek baytlık karakterler kullanarak) anlamına gelir.

UTF-8 / MultiByte kodlaması : MultiByte kodlaması kullanılarak her karakter 1 bayttan fazla yer kaplayabilir. UTF-8 için alan tüketimi karakter başına 1 ila 4 bayt arasındadır.


2
@ fyr- L + 2 bayt için araç nedir, burada L <2 ^ 16? Lütfen biraz daha tanımlayabilir misiniz? Diğer akıllıca bana metin alanında kaç karakter saklayabileceğimizi söyleyebilir misiniz? Lütfen ....
Bajrang

2
@JJ L karakter sayısıdır ve karakter sayısı 16'nın gücüne 2'den az olmalıdır. 2 ^ 16 = 65536. Böylece 65535 bayt + 3 bayt = 65 538 bayt tüketen 65535 karakter girebilirsiniz. doldurulmuş alan.
2012'de

9
Boyut sınırlarının bayt olduğunu unutmayın . Bu nedenle, çok baytlık karakterler kullanırsanız, METİN sütununda 2 ^ 16 karakter alamazsınız, ancak 2 ^ 16 baytta depolayabileceğiniz birçok karakter elde edersiniz.
Bill Karwin

4
Bill Karwin'in söyledikleri. KARAKTER DEĞİL BAYLAR. Bir karakter, verilen kodlamayla depolamak için 4 bayt kullanabilir (UTF-8'deki like gibi).
basic6

8
MySQL'de utf8'in 3 bayta kadar, utf8mb4'ün 4'e kadar tükettiğini unutmayın. Başvuru
16'da

126

TINYTEXT: 256 bayt
METİN: 65,535 bayt
MEDIUMTEXT: 16,777,215 bayt
LONGTEXT: 4,294,967,295 bayt


10
Kabul edilen cevaba göre TINYTEXT'in 256 bayt yerine 255 bayt olması gerektiğini düşünüyorum?
cytsunny

83
Type       | Approx. Length     | Exact Max. Length Allowed
-----------------------------------------------------------
TINYTEXT   | 256 Bytes          |           255 characters
TEXT       |  64 Kilobytes      |        65,535 characters
MEDIUMTEXT |  16 Megabytes      |    16,777,215 characters
LONGTEXT   |   4 Gigabytes      | 4,294,967,295 characters

Not: Çok baytlı karakterler kullanılıyorsa (her Arapça karakterin 2 bayt aldığı Arapça gibi) için "Tam Maksimum İzin Verilen Uzunluk" sütunu TINYTEXTen fazla 127 Arapça karakter içerebilir (Not: boşluk, tire, alt çizgi ve benzeri karakterler) , 1 baytlık karakterlerdir).

Temel olarak, şöyle:

"İzin Verilen Tam Maksimum Uzunluk" = "Bayt cinsinden yaklaşık Uzunluk" - 1



8

Bir metin alanı kaç karakter saklayabilir?

Göre Dokümantasyon charset UTF8 olup olmadığını 21.844 karakter maksimum kullanabilirsiniz

Çok varsa, varb ile yaptığım gibi db metin türü alanında uzunluk belirleyebilir miyim?

Uzunluğu belirtmenize gerek yoktur. Daha fazla karaktere ihtiyacınız varsa MEDIUMTEXT veya LONGTEXT veri türlerini kullanın. VARCHAR ile, belirleme uzunluğu Depolama gereksinimi için değil, yalnızca verilerin veri tabanından nasıl alınacağı içindir.


8
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

TINYTEXTen fazla 255karakter depolayabilen bir dize veri türüdür .

TEXT65,535karaktere kadar saklayabilen bir dize veri türüdür . TEXTkısa makaleler için yaygın olarak kullanılır.

LONGTEXTmaksimum 4,294,967,295karakter uzunluğuna sahip bir dize veri türüdür . LONGTEXTBir romanın bir bölümü gibi büyük metinleri saklamanız gerekiyorsa kullanın .


1

TEXT65.535 karaktere kadar saklayabilen bir dize veri türüdür. Ancak yine de daha fazla veri depolamak istiyorsanız veri türünüLONGTEXT

ALTER TABLO name_tabelDEĞİŞİM text_fieldUZUNLUĞU KARAKTER SETİ utf8COLLATE utf8_general_ciNULL DEĞİL;


1

MySql sürüm 8.0 için.

Sayısal Tip Depolama Gereksinimleri

Data Type       Storage Required
TINYINT         1 byte
SMALLINT        2 bytes
MEDIUMINT       3 bytes
INT, INTEGER    4 bytes
BIGINT          8 bytes
FLOAT(p)        4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT           4 bytes
DOUBLE, REAL    8 bytes
DECIMAL(M,D), NUMERIC(M,D)  Varies; see following discussion
BIT(M)  approximately (M+7)/8 bytes

DECIMAL (ve NUMERIC) sütun değerleri, dokuz ondalık (temel 10) basamağı dört bayta paketleyen bir ikili biçim kullanılarak temsil edilir. Her değerin tamsayı ve kesirli kısımları için depolama ayrı ayrı belirlenir. Dokuz basamaktan her biri dört bayt gerektirir ve “artık” basamaklar dört baytlık bir kısım gerektirir. Fazla hane için gereken depolama alanı aşağıdaki tabloda verilmiştir.

Tarih ve Saat Türü Depolama Gereksinimleri TIME, DATETIME ve TIMESTAMP sütunları için, MySQL 5.6.4'ten önce oluşturulan tablolar için gereken depolama alanı 5.6.4 ve sonrasında oluşturulan tablolardan farklıdır. Bunun nedeni, bu türlerin 0 ila 3 bayt gerektiren kesirli bir bölüme sahip olmasına izin veren 5.6.4'teki bir değişikliktir.

Data Type   Storage Required Before MySQL 5.6.4   Storage Required as of MySQL 5.6.4
YEAR        1 byte                                1 byte
DATE        3 bytes                               3 bytes
TIME        3 bytes                               3 bytes + fractional seconds storage
DATETIME    8 bytes                               5 bytes + fractional seconds storage
TIMESTAMP   4 bytes                               4 bytes + fractional seconds storage

MySQL 5.6.4 itibarıyla YEAR ve DATE için depolama alanı değişmeden kalmıştır. Ancak, TIME, DATETIME ve TIMESTAMP farklı şekillerde temsil edilir. DATETIME, daha verimli bir şekilde paketlenir, kesirli olmayan parça için 8 bayt yerine 5 bayt gerektirir ve üç parçanın da, saklanan değerlerin kesirli saniye hassasiyetine bağlı olarak 0 ila 3 bayt gerektiren bir kesirli kısmı vardır.

Fractional Seconds Precision    Storage Required
0                               0 bytes
1, 2                            1 byte
3, 4                            2 bytes
5, 6                            3 bytes

Örneğin, TIME (0), TIME (2), TIME (4) ve TIME (6) sırasıyla 3, 4, 5 ve 6 bayt kullanır. TIME ve TIME (0) eşdeğerdir ve aynı depolama alanını gerektirir.

Zamansal değerlerin dahili gösterimi hakkında ayrıntılar için, bkz. MySQL Internals: Önemli Algoritmalar ve Yapılar.

Dize Türü Depolama Gereksinimleri Aşağıdaki tabloda, M, ikili olmayan dize türleri için karakterlerde bildirilen sütun uzunluğunu ve ikili dize türleri için baytları temsil eder. L, belirli bir dize değerinin bayt cinsinden gerçek uzunluğu temsil eder.

Data Type                    Storage Required
CHAR(M)                      The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
BINARY(M)                    M bytes, 0 <= M <= 255
VARCHAR(M), VARBINARY(M)     L + 1 bytes if column values require 0  255 bytes, L + 2 bytes if values may require more than 255 bytes
TINYBLOB, TINYTEXT           L + 1 bytes, where L < 28
BLOB, TEXT                   L + 2 bytes, where L < 216
MEDIUMBLOB, MEDIUMTEXT       L + 3 bytes, where L < 224
LONGBLOB, LONGTEXT           L + 4 bytes, where L < 232
ENUM('value1','value2',...)  1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum)
SET('value1','value2',...)   1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.