精华内容
下载资源
问答
  • varchar255
    万次阅读
    2016-05-25 16:24:29
    在字符集为UTF-8的情况下:

    MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8 3字节编码长度),则VARCHAR(255)共可存放约85个汉字;
    MySQL | ver >= 4.1: VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以存放255个汉字。
    另外,据我所知,MySQL对UTF-8的支持也仅仅限于1~3字节编码长度(Unicode:0x0000~0xFFFF),可以满足大部分需求,但是生僻字就不行了。
    更多相关内容
  • MySQL 中的 VARCHAR(255) 可以存放 1 - 255 个 UTF-8 格式的汉字 ... latin1 字符集最多可以存放 85 个 UTF-8 格式的汉字 ... utf-8 字符集最多可以存放 255 个 UTF-8 格式的汉字 ... 如果谁可以找到一个占用两字节...

    好吧这问题的最佳答案难选了 ... 我是来添乱的 ...

    楼上三个回复都正确但都不全面 ...这事情主要还是看 数据库字符集 ...

    如果是 latin1 的话 ... 计算字节长度 ... greatghoul 的答案是对的 ...

    如果是 utf-8 的话 ... 计算字符长度 ... joyeu 的答案是对的 ...

    至于 Theo 的答案里说的 4.1 为临界点的区别 ... 这事情真心和版本没什么关系 ...

    只是因为 4.1 之后才引入字符集支持的口牙!

    如果选 latin1 的话不管什么版本都会计算字节长度的口牙!

    为了避免这个答案看起来是完全照抄了楼上 ... 我提一点其他的东西 ...

    其实这题目里有另外一个坑 ... 就是要保存的东西是 汉字 ...

    如果要保存 utf-8 字符的话 latin1 字符集可以保存 63 - 127 个 ...

    但如果要保存汉字 ... 那么最大数量恐怕只有精确的 85 个 ...

    因为我在码这些字之前自己想尽了一切方法测试都没能找到一个占用四字节的汉字 ...

    怾gi 黁nun 兺bun 乯olo 乭daori 旕eosi 銰ngai 虄sari 哛popuni 硛ceoke 縇seone 穒keweoke

    这组字够不够生僻 ..? 每个字也仅仅占用三字节而已 ...

    至于两字节的汉字 ... 我也找不到 ... greatghoul 说的 〇 是错的 ... 〇占用三字节 ...

    来个总结性陈词 ...

    MySQL 中的 VARCHAR(255) 可以存放 1 - 255 个 UTF-8 格式的汉字 ...

    latin1 字符集最多可以存放 85 个 UTF-8 格式的汉字 ...

    utf-8 字符集最多可以存放 255 个 UTF-8 格式的汉字 ...

    如果谁可以找到一个占用两字节或者占用四字节的汉字那么我的这个答案就错了 ...

    找不到的话可以姑且信之 ...

    以上 ...

    展开全文
  • 根据Oracle的习惯,设置了以下字段长度设置规范:名称字段:varchar(200)长名字段/简介字段:varchar(500)特别长的描述字段:varchar(2000)具有超过2000个汉字的字段:文本为什么长度为200,而不是100或300,也被认为拍了...

    bc3f9276acf88283a0569b9b9ef9ee92.png

    在线QQ客服:1922638

    专业的SQL Server、MySQL数据库同步软件

    最近,正在整理代码规范。根据Oracle的习惯,设置了以下字段长度设置规范:

    名称字段:varchar(200)

    长名字段/简介字段:varchar(500)

    特别长的描述字段:varchar(2000)

    具有超过2000个汉字的字段:文本

    为什么长度为200,而不是100或300,也被认为拍了拍头,类似于DND中的房屋规则。

    但是当被问到为什么我通常不将其设置为varchar(255)时,我目前无法回答。利用这个机会来总结字段长度的知识。

    在MySQL 4.1之前,varchar的最大长度为255字节字节(在5.0.3之前还有一个版本)。检查该版本是否于2004年发布。惯性令人恐惧。我不相信从2004年开始升级了多少系统。

    对于INNODB,存储方法与两者完全相同:1-2字节的存储长度,实际的字符串存储在另一个位置,每个字符为1字节至4字节不确定(取决于编码和实际存储)字符)。因此,将字段从varchar(50)长度更改为varchar(100)长度将不会导致表重构。但是,如果将长度从varchar(50)更改为varchar(256),则意味着该长度将需要使用2个字节或更多。

    由于INNODB的长度小于255,并且我们通常根本不使用MYISAM,因此,出于担心,我们可以将255以下的字段类型设置为varchar(255),这是什么?

    不会吧

    因为内存表介意。

    尽管我们不会以纯文本形式创建内存表,但是所有中间结果将由数据库引擎存储在内存表中。我们可以使用EXPLAIN或SHOW STATUS来检查MYSQL是否使用内存表来帮助完成操作。

    内存表将按照固定的长度保存。以utf-8编码为例,对于varchar(255),每行占用的内存长度为2字节+ 3 * 255字节。对于100条数据,单个varchar字段占用大约1GB的内存。如果应该使用varchar(50),则可以保留大约80%的内存空间。

    另外,长度255也可能导致索引凹坑。 MySQL 5.6及之前版本的最大长度为767字节。但是,在MySQL 5.5版之后,它开始支持4字节字符集utf8mb4(沙雕表达式中使用的字符太多,并且长度不够)。 255 * 4 767,因此无法将varchar(255)字段放置在索引中。尽管MySQL在5.7版本之后将限制更改为3072字节,但是如果它是一个多字段联合索引,它仍可能超过此限制。

    因此,我们的结论是:如果长度足够,则越短越好。

    varchar的最大长度为65535字节。所以

    如果字符类型为gbk,则每个字符最多可占用2个字节,并且最大长度不能超过32766个字符

    如果字符类型为utf8,则每个字符最多可占用3个字节,并且最大长度不能超过21845个字符

    如果字符类型为utf8mb,则每个字符最多可占用4个字节,并且最大长度不能超过16383个字符。

    但是通常varchar的长度限制通常是由一行定义的长度,这是表中定义的所有字段的长度的总和。此限制也是65535字节。如果超过长度,将报告错误:

    1个

    错误1118(42000):行大小太大。使用的表类型的最大行大小(不计BLOB)为65535。您必须将某些列更改为TEXT或BLOB。

    这就是Ali开发规范要求这样做的原因:

    1个

    [必须] Varchar是可变长度的字符串,没有预先分配存储空间,并且长度不能超过5000。如果存储长度大于该值,则将字段类型定义为text,并使用避免影响其他字段的主键。索引效率。

    以前的SQL Server的nvarchar对Oracle的varchar2的固有印象使我始终觉得保存中文文本时varchar的长度需要折半或除以3。

    但这也是MySQL 5.0版本之前的事情。现在varchar(n)是几个,您可以保存几个汉字。

    但是还需要注意使用CHARACTER_LENGTH而不是LENGTH

    1个

    2

    3

    4

    -返回12

    SELECT LENGTH("轻松工作");

    -返回4

    SELECT CHARACTER_LENGTH("轻松工作");

    为什么不使用PostgreSQL而不是MySQL?

    与MySQL相比,我个人更喜欢PostgreSQL,从各种设计细节上我都感到非常标准化。但是无奈的国内分布式数据库解决方案基本上是基于MySQL的。 。 。尽管我们的情况认为今年暂时不需要分发,但可以的话。 。 。

    先动者的优势是可怕的。

    感谢您对stackexchange的详细解答

    数据库设计-MySQL-varchar的长度和性能-数据库管理员堆栈交换

    有关内存表的详细介绍

    MySQL·功能分析·内部临时表

    关于为什么索引长度限制为767字节或3072字节的详细说明

    有关InnoDB索引长度限制的提示

    永久链接到这篇文章[? https://galaxyyao.github.io/2019/07/30/MySQL-不需要varchar-255-Length和存储汉字摘要/?]

    展开全文
  • 如果你用strlen函数来判断,长度是11,正好超过了varchar的长度,但实际上确不是这样,如果直接到phpmyadmin里面执行insert语句,这条字符串是可以插入的! 对于数据库来说,它的长度是5,那么我们如何用PHP来得到这...
  • mysql varchar(255) 浅谈

    2021-01-19 03:14:01
    有没有觉得我们设置varchar长度的时候,很多时候都设置成255,这是为什么呢?其实是因为在5.5.3版本之前InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes),MyIsam存储引擎的表索引的前缀长度最长是1000字节...

    有没有觉得我们设置varchar长度的时候,很多时候都设置成255,这是为什么呢?

    其实是因为在5.5.3版本之前

    InnoDB存储引擎的表索引的前缀长度最长是767字节(bytes),

    MyIsam存储引擎的表索引的前缀长度最长是1000字节(bytes)。

    所以如果字段要创建索引的话,长度就不能超过对应存储引擎的要求 767 bytes或 1000 bytes,而如果中文按1个字符占用3个字节计算,总字节数刚好为765。

    1071 - Specified key was too long; max key length is 767 bytes

    要控制字节长度,就要说到字节编码了。

    一、位(bit)、字节(byte)、字符

    位(bit):计算机内部数据储存的最小单位,10001000是一个八位二进制数。

    字节(byte):计算机中数据处理 的基本单位,习惯上用大写 B 来表示。

    1 B = 8bit

    1 KB = 1024 B

    1 MB = 1024 KB (2^10 B)

    1 GB = 1024 MB (2^20 B)

    1 TB = 1024 GB (2^30 B)

    字符:计算机中使用的字母、数字、字和符号,如 a、A、中、+、*、の......

    二、编码

    UTF-8:是用以解决国际上字符的一种多字节编码。包含全世界所有国家需要用到的字符,是国际编码,通用性强。一个汉字 = 3个字节,英文是一个字节

    UTF-8编码的文字可以在各国支持UTF8字符集额的浏览器上显示。如果是UTF8编码,则在外国人的英文IE也能显示中文,他们无需下载IE的中文语言支持包。

    GBK:GB2312基础上扩容后的国家标准,兼容GB2312。

    GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。

    GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大。

    utf8mb4:在MySQL5.5.3之后增加的,专门用来兼容四字节的unicode的utf-8的超集,比utf-8能表示更多的字符。mb4即为most bytes 4。

    latin1:ISO-8859-1的别名,单字节编码,在支持Latin1编码的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作Latin1编码看待都没有问题

    三、中文与编码

    MySql 5.0 以上的版本:

    一个汉字占多少长度与编码有关:

    UTF-8:一个汉字 = 3个字节,英文 = 1个字节

    GBK: 一个汉字 = 2个字节,英文 = 1个字节

    varchar(n) 在mysql 5.0.3之前表示n个字节,之后修改为表示n个字符,无论汉字和英文,mySql都能存入n个字符,仅实际字节长度有所区别。

    MySQL检查长度,可用一下SQL语言查询

    SELECT LENGTH(fieldname) FROM tablename

    测试

    (1)测试 UTF-8

    CREATE TABLE `test_char_length_utf8` (

    `v1` varchar(9) ,

    `v2` varchar(9)

    )ENGINE=InnoDB CHARSET=utf8;

    c818650fabbf

    创建表单(UTF-8)

    SELECT LENGTH(v1), LENGTH(v2) FROM test_char_length_utf8

    c818650fabbf

    查询长度

    (2)测试 GKB

    CREATE TABLE `test_char_length_gbk` (

    `v1` varchar(9) ,

    `v2` varchar(9)

    )ENGINE=InnoDB CHARSET=gbk;

    c818650fabbf

    创建表单(GBK)

    SELECT LENGTH(v1), LENGTH(v2) FROM test_char_length_gbk

    c818650fabbf

    查询长度

    四、总结

    varchar(255) 是为了索引而设置,能够存储255个汉字。

    varchar(255) 后来成为一些人使用的惯性,其实应根据实际业务场景设置长度。

    varchar(n) 中的n在mysql 5.0.3之前表示n个字节,之后表示n个字符,按照实际使用的数据库字符编码集,占用不同字节数量,比如GBK、UTF8MB4等等。

    展开全文
  • MySQL varchar(255) 和 varchar(256) 区别

    千次阅读 2022-04-07 13:52:12
    原文地址: MySQL varchar(255) 和 varchar(256) 区别 正文 每次给表创建字段的时候, 遇到 VARCHAR 都会想到这个问题, 但是没有深入思考. 在这篇博客中详细学习了一下: 数据库 varchar 长度最佳实践 VARCHAR(256) 会...
  • 在mysql中为什么定义varchar(255)?
  • 首先看下为什么MySQL中varchar会经常设置成varchar(255)?MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,...
  • 数据库中的 varchar(255) 原因剖析

    千次阅读 2021-03-04 03:44:39
    数据库中的 varchar(255)MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-83字节编码长度),则VARCHAR(255)共可存放约85个汉字;MySQL | ver >= 4.1:VARCHAR以字符为单位存储,...
  • ALTER TABLE kohala_ucs.t_single_extra MODIFY personal_sign varchar(256) NULL DEFAULT '' COMMENT '个性签名'; DBA看过后只说了一句,256修改为255,然后晚上10点后执行。我当时在想,我一直建表都是32,64,...
  • 首先VARCHAR不是定长的,而是可变的,所以一般业务开发我们都要尽量使用最小的长度来满足需求,以免浪费空间,影响性能,而既然是可变的长度,那就得有保存长度的地方,所以如果VARCHAR的长度设置在255以下,那只会...
  • VARCHAR的长度怎么计算? VARCHAR(255) 与 VARCAHR(256)的区别在哪里?
  • 数据库中的 varchar(255) MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8 3字节编码长度),则VARCHAR(255)共可存放约85个汉字; MySQL | ver >= 4.1: VARCHAR以字符为...
  • 项目里突然varchar字段设置255也不够用了,记得规定不能超过255,今天查了一下,现总结如下: MySQL要求一个行定义长度不能超过 65535 bytes(所有字符串类型字段包括其字段名称占用空间都计算在内, text、blob等...
  • mysql定义字段varchar(255)报错超长?

    千次阅读 2020-11-28 11:08:37
    平时习惯性的设计变长字段varchar(255),确保正常情况下数据库用一个字节保存长度信息,节省内存。但是有一次建表语气。 create table user ( id int auto_increment comment '自增主键', username varchar(255) ...
  • 知道之后不要默认每个字段都这样写了,varchar(255)和varchar(100)保存相同长度字符串磁盘使用空间一样,但是处理数据时使用的内存不一样,效率不一样的。
  • 数据库中的 varchar(255)

    万次阅读 2018-11-14 16:46:37
    在字符集为UTF-8的情况下: MySQL | ver &lt; 4.1: VARCHAR以字节为单位存储,所以假设全部...VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以存放255个汉字。  另外,据我所知,My...
  • varchar(20)和varchar(255)的空间开销区别

    千次阅读 2019-08-03 10:45:57
    MySQL建立索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度,也就是说varchar(20)和varchar(255)对应的索引长度分别为203(utf-8)(+2+1),2553(utf-8)(+2+1),其中"+2"用来存储长度信息,“+1”用来...
  • 起因最近在整理代码规范,按照之前oracle的习惯,定了以下的字段长度设定规范:名称字段:varchar(200)较长的名称字段/简介字段:varchar...但在被问起为什么不设置为经常见到的varchar(255)时,一时回答不上来。...
  • 很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然。官方文档所说,varchar有效的最大长度取决于行的容量,...
  • 对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即200个字符空间。...
  • MySQL中的int(11)和varchar(255)含义

    千次阅读 2021-04-09 10:01:07
    一、前言 在工作中经常要与 mysql 打交道,但是对 mysql 的各个字段类型一直都是一知半解,因此写本文总结记录一番。 二、简介 对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11...
  • mysql中的Varchar(255)可以放多少个汉字

    万次阅读 2019-07-03 17:44:18
    在字符集为UTF-8的情况下: MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8 ...VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以存放255个汉字。 ...
  • 数据库中的 varchar(255)MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-83字节编码长度),则VARCHAR(255)共可存放约85个汉字;MySQL | ver >= 4.1:VARCHAR以字符为单位存储,...
  • name varchar(50) ) insert into student (name) values ('小明') 对于同样的值"小明",mysql有什么区别 1、对于物理存储上来说,没有区别 mysql存储行记录varchar的数据,是以下面的形式的,在【变长字段长度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,305
精华内容 62,522
关键字:

varchar255