MySQL数据类型之有NCHAR与NVARCHAR数据类型吗?

MySQL数据库有NCHAR与NVARCHAR数据类型吗?

我去,答案是有。


请看演示:
C:\Users\Administrator>mysql test1
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.7.11-log MySQL Community Server (GPL)


Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> select database();
+------------+
| database() |
+------------+
| test1      |
+------------+
1 row in set (0.00 sec)


mysql> SELECT
    ->   DEFAULT_CHARACTER_SET_NAME,
    ->   `DEFAULT_COLLATION_NAME`
    -> FROM
    ->   `information_schema`.`SCHEMATA`
    -> WHERE `SCHEMA_NAME` = 'test1' ;
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_general_ci     |  #数据库默认的字符集是utf8mb4
+----------------------------+------------------------+
1 row in set (0.00 sec)


mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1              |
| t2              |
+-----------------+
2 rows in set (0.00 sec)


mysql> drop table if exists t1;
Query OK, 0 rows affected (0.24 sec)


mysql> drop table if exists t2;
Query OK, 0 rows affected (0.27 sec)


mysql> CREATE TABLE t2 (
    ->   id INT PRIMARY KEY,
    ->   char_name CHAR(10),
    ->   nchar_name NCHAR (10),
    ->   var_name VARCHAR(10),
    ->   nvar_name NVARCHAR (10)
    -> );
Query OK, 0 rows affected (0.33 sec)


mysql> desc t2;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | NO   | PRI | NULL    |       |
| char_name  | char(10)    | YES  |     | NULL    |       |
| nchar_name | char(10)    | YES  |     | NULL    |       |
| var_name   | varchar(10) | YES  |     | NULL    |       |
| nvar_name  | varchar(10) | YES  |     | NULL    |       |  #由此可见,虽然我们定义为nchar,但是实际数据库转换成了char类型。但是.....
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)


mysql> show create table t2;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                              |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t2    | CREATE TABLE `t2` (
  `id` int(11) NOT NULL,
  `char_name` char(10) DEFAULT NULL,
  `nchar_name` char(10) CHARACTER SET utf8 DEFAULT NULL,  #虽然转换成了char,但是字符集不是默认的数据库字符集utf8mb4,而是utf8
  `var_name` varchar(10) DEFAULT NULL,
  `nvar_name` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


mysql>


所以,nchar和nvarchar类型是有的。

数据库会默认将nchar类型转换成char in utf8。nvarchar类型也一样。


并且根据文档描述,如下的定义方式实际相等:

CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值