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)