MySQL数据类型varchar详解_MySQL
bitsCN.com
1、varchar(N)的逻辑意义
从MySQL4.1开始,varchar (N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数。
不管是一个中英文字符或者数字、或者一个汉字,都当做一个字符。在4.1之前,N表示的是最大存储的字节数(bytes)。
2、varchar(N)到底能存多长的数据
在mysql reference manual上,varchar最多能存储65535个字节的数据。varchar 的最大长度受限于最大行长度(max row size,65535bytes)。65535并不是一个很精确的上限,可以继续缩小这个上限。65535个字节包括所有字段的长度,变长字段的长度标识(每个变长字段额外使用1或者2个字节记录实际数据长度)、NULL标识位的累计。
NULL标识位,如果varchar字段定义中带有default null允许列空,则需要需要1bit来标识,每8个bits的标识组成一个字段。一张表中存在N个varchar字段,那么需要(N+7)/8 (取整)bytes存储所有的NULL标识位。
如果数据表只有一个varchar字段且该字段DEFAULT NULL,那么该varchar字段的最大长度为65532个字节,即65535-2-1=65532 bytes。
CREATE TABLE `vchar1` ( `name` VARCHAR(65533) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `vchar2` ( `name` VARCHAR(65533) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
如果数据表只有一个varchar字段且该字段NOT NULL,那么该varchar字段的最大长度为65533个字节,即65535-2=65533bytes。
CREATE TABLE `vchar3` ( `name` VARCHAR(65532) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `vchar4` ( `name` VARCHAR(65532) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
来个略微复杂点的表结构,->
CREATE TABLE `tv` (
`a` VARCHAR(100) DEFAULT NULL,
`b` VARCHAR(100) DEFAULT NULL,
`c` VARCHAR(100) DEFAULT NULL,
`d` VARCHAR(100) DEFAULT NULL,
`e` VARCHAR(100) DEFAULT NULL,
`f` VARCHAR(100) DEFAULT NULL,
`g` VARCHAR(100) DEFAULT NULL,
`h` VARCHAR(100) DEFAULT NULL,
`i` VARCHAR(N) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
`i` varchar(N) DEFAULT NULL中N最大值可以为多少?
这样计算:已知确定的字段长度为100*8 bytes,8个varchar(100)字段总共需要变长字段表示字节为1*8=8 bytes。每个NULL字段用1bit标识,9个字段都是default null,那么需要用(9+7)/8bit = 2 bytes存储NULL标识位。65535-100*8-1*8-2 = 64725 > 256, 那么字段i的最大长度为64725 - 2 =64723 bytes,即N=64723 。
varchar到底能存多少个字符?这与使用的字符集相关,latin1、gbk、utf8编码存放一个字符分别需要占1、2、3个字节。
3、varchar物理存储
在物理存储上,varchar使用1到2个额外的字节表示实际存储的字符串长度(bytes)。如果列的最大长度小于256个字节,用一个字节表示(标识)。如果最大长度大于等于256,使用两个字节。
当选择的字符集为latin1,一个字符占用一个byte
varchar(255)存储一个字符,一共使用2个bytes物理空间存储数据实际数据长度和数据值。
varchar(256)存储一个字符,使用2 bytes表示实际数据长度,一共需要3 bytes物理存储空间。
varchar对于不同的RDBMS引擎,有不通的物理存储方式,虽然有统一的逻辑意义。对于mysql的不同存储引擎,其实现方法与数据的物理存放方式也不同。
4、InnoDB中的varchar
InnoDB中varchar的物理存储方式与InnoDB使用的innodb_file_format有关。早期的innodb_file_forma使用的Antelope文件格式,支持redundant和compact两种row_format。从5.5开始或者InnoDB1.1,可以使用一种新的file format,Barracuda。Barracuda兼容Redundant,另外还支持dynamic和compressed两种row_format.
当innodb_file_format=Antelope,ROW_FORMAT=REDUNDANT 或者COMPACT。
innodb的聚集索引(cluster index)仅仅存储varchar、text、blob字段的前768个字节,多余的字节存储在一个独立的overflow page中,这个列也被称作off-page。768个字节前缀后面紧跟着20字节指针,指向overflow pages的位置。
另外,在innodb_file_format=Antelope情况下,InnoDB中最多能存储10个大字段(需要使用off-page存储)。innodbd的默认page size为16KB,InnoDB单行的长度不能超过16k/2=8k个字节,(768+20)*10 当innodb_file_format=Barracuda, ROW_FORMAT=DYNAMIC 或者 COMPRESSED
innodb中所有的varchar、text、blob字段数据是否完全off-page存储,根据该字段的长度和整行的总长度而定。对off-page存储的列,cluster index中仅仅存储20字节的指针,指向实际的overflow page存储位置。如果单行的长度太大而不能完全适配cluster index page,innodb将会选择最长的列作为off-page存储,直到行的长度能够适配cluster index page。
5、MyISAM中的varchar
对于MyISAM引擎,varchar字段所有数据存储在数据行内(in-line)。myisam表的row_format也影响到varchar的物理存储行为。
MyISAM的row_format可以通过create或者alter sql语句设为fixed和dynamic。另外可以通过myisampack生成row_format=compresse的存储格式。
当myisam表中不存在text或者blob类型的字段,那么可以把row_format设置为fixed(也可以为dynamic),否则只能为dynamic。
当表中存在varchar字段的时候,row_format可以设定为fixed或者dynamic。使用row_format=fixed存储varchar字段数据,浪费存储空间,varchar此时会定长存储。row_format为fixed和dynamic,varchar的物理实现方式也不同(可以查看源代码文件field.h和field.cc),因而myisam的row_format在fixed和dynamic之间发生转换的时候,varchar字段的物理存储方式也将会发生变化。
bitsCN.com

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Der interne Code eines chinesischen Zeichens benötigt zum Speichern 2 Bytes. Im beliebten chinesischen Zeichensystem in China belegt der interne Code eines chinesischen Zeichens 2 Bytes, da das chinesische Zeichenverarbeitungssystem die Kompatibilität zwischen chinesischen und westlichen Sprachen sicherstellen muss, wenn es sowohl ASCII-Codes als auch nationale Standardcodes für chinesische Zeichen gibt System wird es zu Mehrdeutigkeiten kommen. Zu diesem Zweck sollte der interne Code für chinesische Zeichen entsprechend verarbeitet und in den nationalen Standardcode umgewandelt werden.

PHP ist eine weit verbreitete serverseitige Skriptsprache, die häufig für die Website-Entwicklung verwendet wird. Während der Website-Entwicklung stoßen wir häufig auf die Notwendigkeit, chinesische Schriftzeichen zu transkodieren, insbesondere wenn es um chinesische Schriftzeichen geht. Durch die Beherrschung der PHP-Fähigkeiten bei der Verarbeitung der Transkodierung chinesischer Zeichen können Probleme wie verstümmelte Zeichen effektiv vermieden und die Stabilität und Benutzererfahrung der Website verbessert werden. 1. Funktionen utf8_encode und utf8_decode In PHP können Sie die Funktionen utf8_encode und utf8_decode verwenden, um chinesische Zeichen zu kodieren und zu dekodieren.

Das Prinzip der Konvertierung chinesischer Zeichen in die UTF-8-Kodierung beinhaltet tatsächlich das Konzept der Zeichenkodierung. In Computern müssen Textzeichen in Form von Zahlen dargestellt und gespeichert werden, und unterschiedliche Zeichenkodierungsschemata legen die Entsprechung zwischen verschiedenen Zeichen und Zahlen fest. UTF-8 ist eine häufig verwendete Zeichenkodierungsmethode. Sie unterstützt Zeichen weltweit und verwendet eine Kodierungsmethode mit variabler Länge, die Zeichen in verschiedenen Sprachen effektiv darstellen kann und besonders für den Unicode-Zeichensatz geeignet ist. Als gängige serverseitige Skriptsprache bietet auch PHP

Nachdem wir das Win11-System installiert haben, müssen wir zuerst die chinesische Eingabemethode für Win11 installieren. Wenn wir nach der Installation der chinesischen Eingabemethode immer noch keine chinesischen Zeichen eingeben können, werden die entsprechenden Dienste möglicherweise neu gestartet ist Steh auf und schau es dir an. Was tun, wenn Win11 keine chinesischen Zeichen eingeben kann: 1. Zunächst müssen wir sicherstellen, dass wir die chinesische Eingabemethode oder die Eingabemethodensoftware eines Drittanbieters heruntergeladen und installiert haben. 2. Wenn Sie nicht wissen, wie Sie eine Eingabemethode hinzufügen, können Sie sich die Tutorials auf dieser Website ansehen. 3. Wenn Sie nach dem Hinzufügen der Eingabemethode immer noch keine chinesischen Zeichen eingeben können, müssen Sie entsprechende Dienste aktivieren. 4. Klicken Sie zunächst mit der rechten Maustaste auf das Startmenü und suchen Sie nach „Computerverwaltung“. 5. Geben Sie dann „Aufgabenplaner“ ein – „Aufgabenplaner“.

Chinesische Schriftzeichen werden im Computer in Form von Glyphencodes ausgegeben, die eine Art Punktmatrixcode sind. Um chinesische Schriftzeichen auf einem Monitor oder Drucker auszugeben, werden die chinesischen Schriftzeichen nach grafischen Symbolen in eine Punktmatrix umgewandelt Der entsprechende Punktmatrixcode wird erhalten.

PHP-Leitfaden für reguläre Ausdrücke: Methoden zum Abgleichen chinesischer Zeichen. Reguläre Ausdrücke spielen eine sehr wichtige Rolle bei der Textverarbeitung. Sie können uns dabei helfen, Textinhalte schnell und genau nach bestimmten Mustern abzugleichen. Für die Verarbeitung chinesischer Texte, insbesondere wenn es um die Zuordnung chinesischer Schriftzeichen geht, können reguläre Ausdrücke ebenfalls nützlich sein. In diesem Artikel wird erläutert, wie reguläre Ausdrücke zum Abgleichen chinesischer Zeichen in PHP verwendet werden, und es werden spezifische Codebeispiele bereitgestellt. Zunächst müssen wir den Umfang chinesischer Schriftzeichen in der Unicode-Codierung klären. Der Unicode-Kodierungsbereich chinesischer Zeichen ist groß

Tipps, um zu vermeiden, dass PHP verstümmelte chinesische Zeichen ausgibt. Beim Programmieren von PHP kommt es häufig vor, dass chinesische Inhalte ausgegeben werden. Wenn Sie jedoch versehentlich falsch damit umgehen, können chinesische Schriftzeichen leicht verstümmelt werden und das Benutzererlebnis beeinträchtigen. Daher kann die Beherrschung einiger Fähigkeiten wirksam verhindern, dass PHP verstümmelte chinesische Zeichen ausgibt. Im Folgenden werden einige spezifische Codebeispiele vorgestellt, um Entwicklern dabei zu helfen, die Ausgabe chinesischer Zeichen besser zu handhaben. 1. Stellen Sie die Zeichenkodierung auf UTF-8 ein, um sicherzustellen, dass die Kodierung der PHP-Datei selbst UTF-8 ist. Sie können den folgenden Kommentar am Anfang des Codes hinzufügen, um ihn anzugeben

Chinesische Schriftzeichen werden in Computern mithilfe interner Codes gespeichert. Chinesische interne Codes beziehen sich auf Codes, die aus 0- und 1-Symbolen bestehen und bei der internen Speicherung, Verarbeitung und Übertragung chinesischer Schriftzeichen verwendet werden. Interne Codes sind die grundlegendste Kodierung chinesischer Schriftzeichen Chinesische Schriftzeichen sind System- und Eingabemethoden für chinesische Schriftzeichen. Der eingegebene chinesische Schriftzeichen-Externcode muss innerhalb der Maschine in internen Code umgewandelt werden, bevor er auf verschiedene Weise gespeichert und verarbeitet werden kann.
