在mysql中varchar和char有什么区别?
我正在尝试存储MD5哈希。
		
		
- MD5哈希始终有32个字符。因此,为了最大限度地提高性能,请使用char(32),因为char是固定长度的(有关char和varchar之间的差异的详细信息,请参阅下面的答案)。
 
	 
VARCHAR是可变长度。
CHAR为定长。
如果您的内容是固定大小的,那么使用CHAR可以获得更好的性能。
有关char和varchar类型的详细说明,请参见mysql页面(务必还要阅读注释)。
		
		
- @Steven:when anon.says"your content is a fixed size"it means the rows of your table must contain all fixed size fields.如果你在一个场地上用坦克对付瓦尔查,你就没有表现了,但这张桌子上有瓦尔查。
- 没有Char datatype adds the performance…当执行时,SQL将产生一个执行计划。Constant there are 2 Columns Charcol Char(2000)and Varcharcol Varchar(2000).in Execution Plan,estimated row size for varchar type of columns might be under estimated.于是,它将气泡引导到DB。所以,使用坦克是一种很好的表现。
- @Marco,为什么我们在这个场景中失去了表现?
- Varchar(n)帕朗切斯价值观的含义是什么?
- @Marco demanio你知道这背后的原因吗?
- @JDC91:In order to have a performance increase the whole row has to be stable-width.MySQL增益优势计算了这类表格中的空间要求和根的胶印。
 
	 
烧焦
用于存储固定长度的字符串值。
数据类型最多可容纳255个字符。
比varchar快50%。
使用静态内存分配。
瓦尔查尔
用于存储长度可变的字母数字数据。
此数据类型最多可容纳
- MySQL5.0.3之前版本:255个字符。
- PostMySQL5.0.3:共65535个字符。
它比char慢。
使用动态内存分配*。
		
		
- 我很惊讶这个答案经常被重复。神秘文献国
- 不是说你也可以存储字母数字数据
- 这50%是什么?50%快做什么?在什么条件下?在这种情况下,静态记忆分配与动态是什么意思?
- @Martinsmith我会问同样的问题别以为信息是准确的Asktom.Oracle.com/pls/asktom/…
- 一个坦克场在下一个坦克场的位置是可以预测的,可以计算的。(Varchar versus which always requires a index location lookup.一个Varchar也可以是一个信息存储在桌面外的参考——一个指针。)Varchar会把你的磁盘空间与坦克柱中的相同数据保存在一起。磁盘空间是碎片。你永远都不能达到足够的速度。用所有固定的长度,而不是可变的长度,你可以享受速度的飞跃。在你的桌子上有一个varchar column或者其他长度可变的columns,你可能和你想要的其他人一样。
- 我不确定是否超快的不良速度为SSD驱动零化了材料优势提供了所有固定场。
 
	 
char与varchar
char用于固定长度的大小变量varchar用于可变长度的大小变量。
例如。
| 12
 3
 4
 5
 6
 7
 8
 
 | CREATE TABLE temp(City CHAR(10),
 Street VARCHAR(10));
 
 INSERT INTO temp
 VALUES('Pune','Oxford');
 
 SELECT LENGTH(city), LENGTH(street) FROM temp;
 | 
输出将为
| 12
 
 | LENGTH(City)          LENGTH(street)10                    6
 | 
号
结论:如果可变长度是可变的,那么要有效地利用存储空间,必须使用varchar而不是char。
		
		
- City=Char(10),Street=Varchar(10),City=Pune,Street=Oxford,Length(City)=4,Length(Street)=6
- 此查询(选择城市长度,城市长度,街道长度)是在Mysql 5.7 mysql>选择城市长度,城市长度,街道长度,时间;+----------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------
 
	 
CHAR(x)列只能有精确的x字符。VARCHAR(x)列最多可以有x个字符。
因为MD5散列的大小总是相同的,所以您可能应该使用CHAR。
然而,您不应该首先使用MD5;它有已知的弱点。用sha2代替。如果您正在散列密码,则应使用bcrypt。
		
		
- "A char(X)column can only have exactly x characters."事实上,你可以将数据添加到十辆坦克之上,但我认为你总是意味着在场景后面保留十辆值得记忆的坦克。
- 你不知道他们为什么要存储MD5哈希斯,有很多有效的理由使用MD5,而这是没有什么安全的。碰撞在所有情况下都不常见,算法比安全性更强。
- 假设Column(X)字符不正确地填充X字符,那么,有任何理由使用它在Varchar(X)甚至固定大小数据上?
 
	 
如果输入的字符小于声明的长度,varchar将切断尾随空格,而char将不会。char将填充空格,并且始终是声明长度的长度。在效率方面,varchar更擅长修剪字符以进行更多调整。但是,如果您知道char的确切长度,char将以更快的速度执行。
What's the difference between VARCHAR and CHAR in MySQL?
号
对于已经给出的答案,我想补充一点,在OLTP系统或频繁更新的系统中,考虑使用CHAR,即使对于可变大小的列,因为更新期间可能存在VARCHAR列碎片。
I am trying to store MD5 hashes.
号
如果安全性真的很重要,MD5哈希不是最佳选择。但是,如果您要使用任何哈希函数,请考虑它的BINARY类型(例如,MD5将产生16字节的哈希,因此BINARY(16)将足以代替CHAR(32)来表示十六进制数字的32个字符。这将节省更多的空间,并提高性能。
		
		
- 跟着这一思路,我会用坦克来进行业务,这意味着可以实现和效率。我还是要用首字母键思考。
 
	 
在今天的大多数RDBMS中,它们是同义词。但是,对于那些仍然有区别的系统,char字段存储为固定宽度的列。如果将其定义为char(10),那么将向表中写入10个字符,其中"padding"(通常是空格)用于填充数据未用完的任何空间。例如,保存"bob"将另存为("bob"+7个空格)。varchar(变量字符)列用于存储数据,而不会浪费char列所做的额外空间。
和往常一样,维基百科的声音更大。
char是固定长度字段;varchar是可变长度字段。如果存储的字符串的长度可变,如名称,则使用varchar;如果长度始终相同,则使用char,因为它的大小效率略高,速度也略快。
char是固定长度字符数据类型,varchar是可变长度字符数据类型。
因为char是固定长度的数据类型,所以char值的存储大小等于此列的最大大小。因为varchar是可变长度的数据类型,所以varchar值的存储大小是输入数据的实际长度,而不是此列的最大大小。
当列中的数据项的大小应相同时,可以使用char。当列中的数据项的大小预计会有很大变化时,可以使用varchar。
char是固定长度,varchar是可变长度。char在每个条目中总是使用相同的存储空间量,而varchar只使用存储实际文本所需的空间量。
根据高性能mysql书:
VARCHAR stores variable-length character strings and is the most common string data type. It can require less storage space than
  fixed-length types, because it uses only as much space as it needs
  (i.e., less space is used to store shorter values). The exception is a
  MyISAM table created with ROW_FORMAT=FIXED, which uses a fixed amount
  of space on disk for each row and can thus waste space. VARCHAR helps
  performance because it saves space.
CHAR is fixed-length: MySQL always allocates enough space for the specified number of characters. When storing a CHAR value, MySQL
  removes any trailing spaces. (This was also true of VARCHAR in MySQL
  4.1 and older versions—CHAR and VAR CHAR were logically identical and differed only in storage format.) Values are padded with spaces as
  needed for comparisons.
号
		
		
- "varchar有助于提高性能,因为它节省了空间",它节省了空间,是的,但它不会对性能产生负面影响吗?VARCHAR需要在需要时动态分配内存,从而降低了与CHAR相反的性能,对吗?
 
	 
Char有固定长度(支持2000个字符),代表字符是数据类型
Varchar的长度可变(支持4000个字符)
		
		
- -1;这些数字对MySQL不正确。(我想他们可能是为了甲骨文?)
 
	 
char或varchar-用于输入文本数据,其中长度可以用括号表示。例如-姓名字符(20)
		
		
- 这不是解决原始问题的方法。作者询问了不同类型的实用区别,而不是句法和类型的目的。又是括号,而不是布拉克。
- @你的最后一句话只适用于美国英语;在英国我们称为(和)括号,许多英国人可能甚至没有意识到英语的方言中"括号"一词可以指标点符号。有一个很强的理由可以选择"括号"而不是"括号"——总的来说,这可能是针对国际上的程序员受众时最清晰的选择——但这比"括号"只是错误的情况要复杂得多。
 
	 
烧焦:
- 同时支持字符和数字。
- 支持2000个字符。
- 固定长度。
变量字符:
- 同时支持字符和数字。
- 支持4000个字符。
- 可变长度。
有什么意见……!!!!!