MySQL列类型之——CHAR与VARCHAR
1.      CAHR与VARCHAR
| 类型 |  | 范围 | 字节 | 备注 | 
| [NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE] | 固定长度字符串 | M表示列长度。M的范围是0到255个字符 | M个字节 0 <= M <= 255 | 1.当保存时在右侧填充空格以达到指定的长度. 2.当检索CHAR值时尾部空格被删除。 3.在存储或检索过程中不进行大小写转换。 | 
| [NATIONAL] VARCHAR(M) [BINARY] | 变长字符串 | M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)。 | L+1个字节,其中L <= M 且0 <= M <= 65535 | 1.同CHAR对比,VARCHAR值保存时只保存需要的字符数并不进行填充,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。 2.当值保存和检索时尾部的空格仍保留,符合标准SQL | 
如想了解更多VARCHAR字段长度请点击http://www.cnblogs.com/mo-beifeng/archive/2011/08/09/2133039.html
2.      下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:
| 值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 | 
| '' | '    ' | 4个字节 | '' | 1个字节 | 
| 'ab' | 'ab  ' | 4个字节 | 'ab ' | 3个字节 | 
| 'abcd' | 'abcd' | 4个字节 | 'abcd' | 5个字节 | 
| 'abcdefgh' | 'abcd' | 4个字节 | 'abcd' | 5个字节 | 
注意:上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值不保存,并且会出现错误。
3.      从CHAR(4)和VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。通过下面的例子说明该差别:
mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
 
mysql> INSERT INTO vc VALUES ('ab  ', 'ab  ');
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab  +          | ab+            |
+----------------+----------------+
4.      但是MySQL中的所有CHAR和VARCHAR值比较时不需要考虑任何尾部空格,例如:
mysql> CREATE TABLE names (myname CHAR(10), yourname VARCHAR(10));
Query OK, 0 rows affected (0.09 sec)
 
mysql> INSERT INTO names VALUES ('Monty ', 'Monty ');
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT myname = 'Monty  ', yourname = 'Monty  ' FROM names;
+--------------------+----------------------+
| myname = 'Monty  ' | yourname = 'Monty  ' |
+--------------------+----------------------+
|                  1 |                    1 |
+--------------------+----------------------+
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号