刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误。

  nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据。

        按字符存储,1个中文或者英文字符都占2个字节。

  varchar(n):n指的是字节个数(其实这个地方用【字符】也行,1个字符占一个字节),范围是1-8000,存储的是可变长度的非Unicode字符数据。

        按字节存储,1个中文或者英文字符都占1个字节。

  实验例子:创建一个People2表,有字段UName,数据类型为varchar(2);字段Age,数据类型为nvarchar(2)。

   Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

 

 

  1.测试varchar(2)

  (1).Uname列里插入1个汉字或1个英文

  结果:全部成功

  Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

 

   (2).Uname列里插入2个汉字或2个英文

  结果:2个英文的成功,2个汉字的失败

  Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

  

   (2).Uname列里插入1个汉字和1个英文

  结果:失败

  Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

总结:在varchar(2)中,2表示最大可以存两个字节,即能存1个汉字符号,或者2个英文符号。1个汉字符号占2个字节,1个英文符号占1个字节。

  

  2.测试nvarchar(2)

    (1).Age列里插入1个汉字或1个英文

  结果:都成功

  Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

 

  (2).Age列里插入2个汉字或2个英文

  结果:都成功

  Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

  (3).Age列里插入1个汉字和1个英文

  结果:成功

  Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

   (4).Age列里插入1个汉字和2个英文

  结果:失败

 

 

总结:在nvarchar(2)中,2表示最大可以存两个字符,即能存2个汉字符号,或者2个英文符号。1个汉字符号占2个字节,1个英文符号占2个字节。

其他:varchar中也能存储汉字,但是,但是,但是遇到一些生僻汉字时有可能会乱码。

 

------------------------------------------------------------------Mysql中的char(n)和varchar(n)-------------------------------------------------------------- 

   在Mysql中,存在着char和varchar两种字符串类型,并没有所谓的nvarchar。以下结论基于Mysql5.0版本以上:

      Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

    为了做实验,先准备下三个不同字符集的数据表。

mysql>  create table tb_latin (a_char char(2),b_varchar varchar(2)) default character set latin1;  
Query OK, 0 rows affected (0.01 sec)

mysql> show create table tb_latin;
+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                            |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
| tb_latin | CREATE TABLE `tb_latin` (
  `a_char` char(2) DEFAULT NULL,
  `b_varchar` varchar(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>  create table tb_gbk (a_char char(2),b_varchar varchar(2)) default character set gbk;  
Query OK, 0 rows affected (0.03 sec)

mysql> show create table tb_gbk;
+--------+------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                       |
+--------+------------------------------------------------------------------------------------------------------------------------------------+
| tb_gbk | CREATE TABLE `tb_gbk` (
  `a_char` char(2) DEFAULT NULL,
  `b_varchar` varchar(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+--------+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>  create table tb_utf8 (a_char char(2),b_varchar varchar(2)) default character set utf8 ;
Query OK, 0 rows affected (0.01 sec)

mysql> show create table tb_utf8;
+---------+--------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                         |
+---------+--------------------------------------------------------------------------------------------------------------------------------------+
| tb_utf8 | CREATE TABLE `tb_utf8` (
  `a_char` char(2) DEFAULT NULL,
  `b_varchar` varchar(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
View Code

相关文章: