【重学 MySQL】五十三、MySQL数据类型概述和字符集设置
MySQL数据类型概述
MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高数据库性能、确保数据完整性和准确性至关重要。
类型 | 类型举例 |
---|---|
整数类型 | TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT |
浮点类型 | FLOAT、DOUBLE |
定点数类型 | DECIMAL |
位类型 | BIT |
日期时间类型 | YEAR、TIME、DATE、DATETIME、TIMESTAMP |
文本字符串类型 | CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT |
枚举类型 | ENUM |
集合类型 | SET |
二进制字符串类型 | BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB |
JSON类型 | JSON对象、JSON数组 |
空间数据类型 | 单值类型:GEOMETRY、POINT、LINESTRING、POLYGON; 集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION |
常见数据类型的属性,如下:
MySQL关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
MySQL字符集设置
MySQL中的字符集是一种用于表示文本字符编码方式的标准,它规定了每个字符对应的二进制数据。MySQL提供的常用字符集包括UTF-8、GBK、GB2312等。在不同的字符集下,同一种字符所占用的存储空间和表示方式也是不同的。
MySQL字符集的设置可以细化到服务器、数据库、表和列四个级别。以下是字符集设置的方法和步骤:
-
服务器级别字符集设置:
- 修改MySQL配置文件my.cnf(Windows下为my.ini),在[mysqld]一节中添加
character-set-server=utf8
(或其他字符集),然后重启MySQL服务使设置生效。 - 也可以通过在启动mysqld时,在命令行参数中指定字符集。
- 修改MySQL配置文件my.cnf(Windows下为my.ini),在[mysqld]一节中添加
-
数据库级别字符集设置:
- 在创建数据库时,可以使用
CHARACTER SET
子句指定字符集,如CREATE DATABASE dbname CHARACTER SET utf8
。 - 对于已存在的数据库,可以使用
ALTER DATABASE
语句修改字符集,如ALTER DATABASE dbname DEFAULT CHARACTER SET utf8
。
- 在创建数据库时,可以使用
-
表级别字符集设置:
- 在创建表时,可以使用
CHARACTER SET
子句指定字符集,如CREATE TABLE tablename (columns...) CHARACTER SET utf8
。 - 对于已存在的表,可以使用
ALTER TABLE
语句修改字符集,如ALTER TABLE tablename DEFAULT CHARACTER SET utf8
。
- 在创建表时,可以使用
-
列级别字符集设置:
- 在创建表时,可以为每个列指定字符集,如
CREATE TABLE tablename (id INT, name VARCHAR(50) CHARACTER SET utf8)
。 - 对于已存在的列,可以使用
ALTER TABLE
和MODIFY
子句修改字符集,如ALTER TABLE tablename MODIFY columnname varchar(100) CHARACTER SET utf8
。
- 在创建表时,可以为每个列指定字符集,如
注意事项
- 在设置字符集时,应确保客户端、连接层、服务器、数据库、表和列等各个级别的字符集设置一致,以避免乱码等问题。
- 对于存储大量文本数据的列,建议使用TEXT类型,并根据需要选择适当的字符集。
- 对于需要精确计算的场景,如金融、会计等领域,建议使用DECIMAL类型以确保数据的准确性。
- 在进行数据导入和导出时,应注意字符集的兼容性,确保数据文件的字符集与MySQL的字符集一致。
通过合理设置和使用MySQL的数据类型和字符集,可以优化数据库性能、确保数据完整性和准确性,并满足不同的数据处理和存储需求。