데이터 베이스 MySQL 튜토리얼 MySQL数据类型varchar详解_MySQL

MySQL数据类型varchar详解_MySQL

Jun 01, 2016 pm 01:18 PM
한자

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

한자의 내부 코드를 저장하려면 몇 바이트가 필요합니다. 한자의 내부 코드를 저장하려면 몇 바이트가 필요합니다. Dec 14, 2020 pm 05:45 PM

한자의 내부 코드를 저장하려면 2바이트가 필요합니다. 중국의 대중적인 한자 체계에서는 한자의 내부 코드가 2바이트를 차지한다. 한자 처리 체계는 한자와 서양어 간의 호환성을 보장해야 하기 때문에 ASCII 코드와 한자 국가 표준 코드가 존재할 경우 모호성이 발생한다. 이를 위해서는 한자 내부코드를 적절하게 가공하여 국가표준코드로 변환해야 한다.

PHP 처리 한자 트랜스코딩 기술 습득 PHP 처리 한자 트랜스코딩 기술 습득 Mar 28, 2024 pm 03:47 PM

PHP는 웹사이트 개발에 널리 사용되는 서버측 스크립팅 언어입니다. 웹사이트를 개발하는 동안, 특히 한자를 다룰 때 한자를 트랜스코딩해야 하는 경우가 종종 있습니다. 중국어 문자 트랜스코딩을 처리하는 PHP 기술을 익히면 문자 깨짐과 같은 문제를 효과적으로 방지하고 웹사이트의 안정성과 사용자 경험을 향상시킬 수 있습니다. 1.utf8_encode 및 utf8_decode 함수 PHP에서는 utf8_encode 및 utf8_decode 함수를 사용하여 한자를 인코딩하고 디코딩할 수 있습니다.

PHP에서 한자를 UTF-8 인코딩으로 변환하는 원리에 대한 심층적인 이해 PHP에서 한자를 UTF-8 인코딩으로 변환하는 원리에 대한 심층적인 이해 Mar 28, 2024 pm 02:44 PM

한자를 UTF-8 인코딩으로 변환하는 원리에는 실제로 문자 인코딩 개념이 포함됩니다. 컴퓨터에서 텍스트 문자는 숫자 형식으로 표현되고 저장되어야 하며, 다양한 문자 인코딩 체계는 다양한 문자와 숫자 간의 대응을 지정합니다. UTF-8은 일반적으로 사용되는 문자 인코딩 방법으로 전 세계적으로 문자를 지원하며 다양한 언어의 문자를 효과적으로 표현할 수 있는 가변 길이 인코딩 방법을 사용하며 특히 유니코드 문자 집합에 적합합니다. 일반적인 서버측 스크립팅 언어로서 PHP는 다음과 같은 기능도 제공합니다.

win11 한자입력 문제 해결방법 win11 한자입력 문제 해결방법 Jan 05, 2024 am 08:29 AM

win11 시스템을 설치한 후 한자를 입력하려면 먼저 win11 중국어 입력 방법을 설치해야 합니다. 중국어 입력 방법을 설치한 후에도 여전히 한자를 입력할 수 없으면 다음을 다시 시작하면 됩니다. 일어나서 살펴보세요. win11에서 중국어 문자를 입력할 수 없는 경우 수행할 작업: 1. 먼저 중국어 입력 방법 또는 타사 입력 방법 소프트웨어를 다운로드하여 설치했는지 확인해야 합니다. 2. 입력 방법을 추가하는 방법을 모르는 경우 이 사이트의 튜토리얼을 확인하세요. 3. 입력방법을 추가한 후에도 여전히 한자를 입력할 수 없는 경우 관련 서비스를 활성화해야 합니다. 4. 먼저 시작 메뉴를 마우스 오른쪽 버튼으로 클릭하고 "컴퓨터 관리"를 찾습니다. 5. 그런 다음 "작업 스케줄러" - "작업 스케줄러"를 입력합니다.

컴퓨터에서는 한자가 어떤 형태로 출력되나요? 컴퓨터에서는 한자가 어떤 형태로 출력되나요? Dec 07, 2020 am 11:15 AM

한자는 도트 매트릭스 코드의 일종인 글리프 코드(Glyph Code) 형태로 컴퓨터에 출력되는데, 이는 한자를 모니터나 프린터로 출력하기 위해 그래픽 기호에 따라 한자를 도트 매트릭스로 디자인한 것이며, 해당 도트 매트릭스 코드가 얻어집니다.

PHP 정규식 가이드: 한자를 일치시키는 방법 PHP 정규식 가이드: 한자를 일치시키는 방법 Mar 20, 2024 pm 05:27 PM

PHP 정규식 가이드: 한자 일치 방법 정규식은 텍스트 처리에서 매우 중요한 역할을 하며 특정 패턴의 텍스트 내용을 빠르고 정확하게 일치시키는 데 도움이 됩니다. 중국어 텍스트 처리, 특히 한자 일치가 특별히 필요한 경우 정규 표현식이 유용할 수도 있습니다. 이 기사에서는 정규식을 사용하여 PHP에서 중국어 문자를 일치시키는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 유니코드 인코딩에서 한자의 범위를 명확히 할 필요가 있습니다. 한자의 유니코드 인코딩 범위가 넓습니다.

PHP에서 잘못된 한자를 출력하는 것을 방지하는 팁 PHP에서 잘못된 한자를 출력하는 것을 방지하는 팁 Mar 16, 2024 am 10:21 AM

PHP에서 한자가 왜곡되어 출력되는 것을 방지하는 팁 PHP를 프로그래밍할 때 중국어 콘텐츠가 출력되는 상황을 자주 접하게 됩니다. 그러나 실수로 부적절하게 처리하면 한자가 왜곡되어 사용자 경험에 영향을 미치기 쉽습니다. 따라서 일부 기술을 익히면 PHP가 잘못된 한자를 출력하는 것을 효과적으로 방지할 수 있습니다. 개발자가 중국어 문자 출력을 더 잘 처리할 수 있도록 몇 가지 특정 코드 예제가 아래에 소개됩니다. 1. PHP 파일 자체의 인코딩이 UTF-8이 되도록 문자 인코딩을 UTF-8로 설정합니다. 지정하려면 코드 시작 부분에 다음 주석을 추가할 수 있습니다.

컴퓨터에 한자를 저장하는 데 사용되는 것은 무엇입니까? 컴퓨터에 한자를 저장하는 데 사용되는 것은 무엇입니까? Dec 07, 2020 am 10:17 AM

컴퓨터 내부의 한자는 내부코드를 사용하여 저장되는데, 한자 내부코드는 한자의 내부 저장, 처리, 전송에 사용되는 0과 1의 기호로 구성된 코드를 말한다. 한자란 시스템과 한자입력방법으로, 입력된 한자 외부코드는 기계 내부에서 내부코드로 변환되어야 다양한 방법으로 저장 및 처리가 가능하다.

See all articles