数据类型

一、导入实验数据

创建数据库

root@localhost) [mysql]> create database dbt3;
Query OK, 1 row affected (0.10 sec)

到时sql文件

[root@mysql init.d]# mysql -uroot -p dbt3 </root/soft/dbt3_s1.sql
Enter password: 

二、int数据类型

 2.1、unsigned属性

(root@localhost) [db1]> create table ab(a int unsigned,b int signed);
Query OK, 0 rows affected (0.14 sec)

(root@localhost) [db1]> insert into ab values(0,-5);
Query OK, 1 row affected (0.87 sec)

unsigned  :非负数;

unsigned表示,数据项恒为正整数还可以为整数0,0不属于正整数;

2.2、zerofile属性

(root@localhost) [db1]> create table bc(a int(10) unsigned zerofill,b int(4) signed zerofill);
Query OK, 0 rows affected (0.03 sec)

(root@localhost) [db1]> insert into bc values(2,3);
Query OK, 1 row affected (0.44 sec)

(root@localhost) [db1]> select * from bc;
+------------+------+
| a          | b    |
+------------+------+
| 0000000002 | 0003 |
+------------+------+
1 row in set (0.32 sec)

 2.3、auto_increament

create table cc(a int(11) auto_increment,b tinyint(4),primary key(a));

 插入数据

(root@localhost) [db1]> insert into cc values(null,3);
Query OK, 1 row affected (2.90 sec)

(root@localhost) [db1]> select * from cc;
+---+------+
| a | b    |
+---+------+
| 1 |    3 |
+---+------+
1 row in set (0.34 sec)

2.4、int总结

 

  mysql提供了五种整型: tinyint、smallint、mediumint、int和bigint。int为integer的缩写。这些类型在可表示的取值范围上是不同的。 整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。

我们经常听到这句话:int(M)中的M代表最大显示宽度,"最大显示宽度"我们第一反应是该字段的值最大能允许存放的值的宽度,以为我们建了int(1),就不能存放数据10了, 其实不是这个意思。
整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,int都是占用4个字节,bigint都要占用8个字节。即int(5)和int(10)可存储的范围一样。

三、数字类型

 

 3.1、floor函数,向下取整

(root@localhost) [db1]> select floor(1.6);
+------------+
| floor(1.6) |
+------------+
|          1 |
+------------+
1 row in set (0.26 sec)

负数

(root@localhost) [db1]> select floor(-1.9);
+-------------+
| floor(-1.9) |
+-------------+
|          -2 |
+-------------+
1 row in set (0.02 sec)

3.2、round函数、四舍五入

(root@localhost) [db1]> select round(1.5);
+------------+
| round(1.5) |
+------------+
|          2 |
+------------+
1 row in set (0.09 sec)

3.3、随机函数rand,

(root@localhost) [db1]> select floor(1+rand()*99);
+--------------------+
| floor(1+rand()*99) |
+--------------------+
|                 86 |
+--------------------+
1 row in set (0.05 sec)

四、字符串类型

 4.1、字符与字节

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。

一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。

字节与字符:

  • ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
  • UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
  • Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
  • 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
  • UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
  • UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。

4.2、字符集

(root@localhost) [db1]> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /mysql3306/share/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.33 sec)

数据库配置文件中修改字符集

vi   /etc/my.cnf
character_set_server=utf8mb4

将表的默认字符集及现有数据的字符集都转换

(root@localhost) [db2]> alter table tb_student convert to character set utf8mb4;
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

4.3、hex函数,转换为16进制

(root@localhost) [db2]> select hex('a');
+----------+
| hex('a') |
+----------+
| 61       |
+----------+
1 row in set (0.00 sec)

4.4、排序规则collation(set  of  rules  for comparing  characters  in a character set)

(root@localhost) [db2]> create table t(a char(10),unique key(a));
Query OK, 0 rows affected (0.04 sec)

(root@localhost) [db2]> insert into t values('A');
Query OK, 1 row affected (0.01 sec)

(root@localhost) [db2]> insert into t values('a');
ERROR 1062 (23000): Duplicate entry 'a' for key 'a'

 

posted @ 2024-01-17 08:46  中仕  阅读(3)  评论(0编辑  收藏  举报