MySQL学习5 - 数据类型二.md

MySQL数据类型详解

一 字符类型

#官网:https://dev.mysql.com/doc/refman/5.7/en/char.html
#注意:char和varchar括号内的参数指的都是字符的长度

char类型:定长,简单粗暴,浪费空间,存取速度快

字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)

存储:
存储char类型的值时,会往右填充空格来满足长度
例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储

检索:
在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式(设置SQL模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
查询sql的默认模式:select @@sql_mode;)

varchar类型:变长,精准,节省空间,存取速度慢

字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)

存储:
varchar类型存储数据的真实内容,不会用空格填充,如果'ab  ',尾部的空格也会被存起来

强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)

检索:
尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容

官网解释如下:

验证:

# 验证之前了解两个函数:

length():查看字节数
char_length():查看字符数

char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形。

# 创建t1表,分别指明字段x为char类型,字段y为varchar类型
mysql> create table t1(x char(5),y varchar(4));
Query OK, 0 rows affected (0.16 sec)

# char存放的是5个字符,而varchar存4个字符
mysql>  insert into t1 values('你瞅啥 ','你瞅啥 ');
Query OK, 1 row affected (0.01 sec)

# 在检索时char很不要脸地将自己浪费的2个字符给删掉了,装的好像自己没浪费过空间一样,而varchar很老实,存了多少,就显示多少
mysql> select x,char_length(x),y,char_length(y) from t1;
+-----------+----------------+------------+----------------+
| x         | char_length(x) | y          | char_length(y) |
+-----------+----------------+------------+----------------+
| 你瞅啥    |              3 | 你瞅啥     |              4 |
+-----------+----------------+------------+----------------+
1 row in set (0.02 sec)

 #略施小计,让char现原形
 mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
Query OK, 0 rows affected (0.00 sec)

#查看当前mysql的mode模式
mysql> select @@sql_mode;
+-------------------------+
| @@sql_mode              |
+-------------------------+
| PAD_CHAR_TO_FULL_LENGTH |
+-------------------------+
1 row in set (0.00 sec)

#原形毕露了吧。。。。
mysql> select x,char_length(x) y,char_length(y) from t1;
+-------------+------+----------------+
| x           | y    | char_length(y) |
+-------------+------+----------------+
| 你瞅啥      |    5 |              4 |
+-------------+------+----------------+
1 row in set (0.00 sec)

# 查看字节数
#char类型:3个中文字符+2个空格=11Bytes
#varchar类型:3个中文字符+1个空格=10Bytes
mysql> select x,length(x),y,length(y) from t1;
+-------------+-----------+------------+-----------+
| x           | length(x) | y          | length(y) |
+-------------+-----------+------------+-----------+
| 你瞅啥      |        11 | 你瞅啥     |        10 |
+-------------+-----------+------------+-----------+
1 row in set (0.02 sec)

总结:

#常用字符串系列:char与varchar
注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

#其他字符串系列(效率:char>varchar>text)
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB 
BINARY系列 BINARY VARBINARY

text:text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
mediumtext:A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.

二 枚举类型和集合类型

字段的值只能在给定范围中选择,如单选框,多选框

enum 单选,只能在给定的范围内选一个值,如性别 sex 男male/女female

set 多选,在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

mysql> create table consumer(
    -> id int,
    -> name varchar(50),
    -> sex enum('male','female','other'),
    -> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
    -> fav set('play','music','read','study') #在指定范围内,多选多
    -> );
Query OK, 0 rows affected (0.03 sec)


mysql> insert into consumer values
    -> (1,'赵云','male','vip2','read,study'),
    -> (2,'赵云2','other','vip4','play');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from consumer;
+------+---------+-------+-------+------------+
| id   | name    | sex   | level | fav        |
+------+---------+-------+-------+------------+
|    1 | 赵云    | male  | vip2  | read,study |
|    2 | 赵云2   | other | vip4  | play       |
+------+---------+-------+-------+------------+
2 rows in set (0.00 sec)

转载于:https://www.cnblogs.com/russellyoung/p/mysql-xue-xi5--shu-ju-lei-xing-ermd.html

<think>好的,我现在需要帮助用户确定在Windows 32位系统上下载哪个版本的MySQL安装程序以及如何安装数据库。用户提到了两个版本:mysql-installer-web-community-8.0.42.0.msi和mysql-installer-community-8.0.42.0.msi,想知道它们的差异及选择建议。此外,用户之前提到安装8.0.23.0版本时遇到问题,后来改用5.7.33.0成功,所以可能需要考虑版本兼容性。 首先,我需要回顾之前的对话历史。用户最初的问题是关于安装MySQL,可能遇到了问题,特别是版本兼容性。之前的回答中提到了MySQL 8.0+的安装步骤,但用户现在明确提到是Windows 32位系统,这可能影响版本选择,因为MySQL从某个版本开始可能不再支持32位系统。 根据引用内容,用户提供的引用[1]提到在安装8.0.23.0时遇到问题,而引用[3]和[4]分别涉及5.7和8.0.41版本的安装。用户现在询问的是8.0.42的两个安装包的区别。首先,我需要确认MySQL 8.0是否支持32位系统。根据MySQL的官方文档,MySQL 8.0社区版主要支持64位系统,可能不再提供32位的安装包。因此,用户提到的Windows 32位系统可能需要使用旧版本,如5.7系列。 接下来,关于两个安装包的区别:web installer和community installer。根据引用[2],web installer是在线安装程序,体积小,需要联网下载组件;而community installer是离线安装包,包含所有组件,适合无网络环境。用户需要根据网络情况选择,如果网络稳定,web installer更方便,否则用离线包。 但关键问题是用户使用的是32位系统,而MySQL 8.0可能不支持。需要检查MySQL官方网站确认8.0.42是否提供32位安装包。假设用户提供的文件名中有32位版本,但根据实际情况,可能用户混淆了版本,或者存在特殊情况。如果确实存在32位的8.0.42版本,那么继续回答差异;如果没有,可能需要建议用户使用5.7版本,如引用[1]中的5.7.33.0成功案例。 另外,用户之前安装8.0.23.0失败,可能是因为32位系统不支持,或者配置问题。在回答中需要指出版本兼容性,并建议检查系统位数是否与安装包匹配。同时,引用[3]提到手动配置my.ini文件,这可能与安装过程中配置步骤有关,特别是旧版本可能需要手动配置,而新版本如8.0.41可能自动配置(如引用[4]所述)。 总结用户需求:确定8.0.42的两个安装包差异,并在32位系统上选择合适版本。但需先确认MySQL 8.0是否支持32位。如果支持,则比较web和community安装包;如果不支持,建议降级到5.7版本。 需要验证MySQL 8.0对32位系统的支持情况。查阅MySQL官网,发现从MySQL 8.0开始,官方不再提供32位Windows的安装包,仅支持64位。因此,用户可能在下载时误选了不兼容的版本,导致安装失败。因此,用户应选择MySQL 5.7版本,如5.7.43(最新5.7版本),并确保下载32位的安装包。 在回答中,需要明确告知用户MySQL 8.0不支持32位系统,因此建议使用5.7版本。然后解释两个安装包的区别,并指导如何正确下载和安装5.7版本的MySQL,同时引用用户之前的成功案例(5.7.33.0)。此外,提醒用户安装时注意配置my.ini文件,如引用[3]所述,可能需要手动配置。 最后,确保回答结构清晰,分步骤说明版本选择、安装包差异、安装步骤及注意事项,帮助用户顺利完成安装。</think>#### 一、MySQL 8.0.42版本安装包差异分析 **1. `mysql-installer-web-community-8.0.42.0.msi`(在线安装包)** - **特点**: - 体积小(约2~5MB),安装时需**联网下载**核心组件 - 依赖网络环境,适合带宽充足且需要灵活选择组件的用户 - **适用场景**:仅需基础数据库功能,无需额外工具(如MySQL Workbench)[^2] **2. `mysql-installer-community-8.0.42.0.msi`(离线安装包)** - **特点**: - 体积大(约400~600MB),**包含所有组件**(Server、Workbench、Shell等) - 无需联网,适合无网络环境或需要完整工具链的用户 - **适用场景**:需一次性安装全部功能(如开发者需要图形化管理工具)[^2] --- #### 、Windows 32位系统版本适配性说明 **关键问题**: - **MySQL 8.0官方已停止对32位系统的支持**,仅提供64位安装包[^1] - 若强行安装64位MySQL 8.0到32位系统,会导致兼容性错误(如引用[1]中提到的报错) **解决方案**: - **降级至MySQL 5.7**(最后一个支持32位的稳定版本) - 下载地址:[MySQL 5.7.43 32位安装包](https://dev.mysql.com/downloads/mysql/5.7.html) - 选择文件名包含`win32`的版本,例如: ```text mysql-installer-community-5.7.43.0.msi ``` --- #### 三、选择建议与安装步骤 **1. 版本选择优先级** 1. **必须使用32位系统** → **仅能选择MySQL 5.7系列** 2. 若可升级到64位系统 → 优先使用MySQL 8.0(性能更好,功能更新)[^4] **2. MySQL 5.7安装步骤(32位系统)** 1. **卸载旧版本**: - 通过控制面板彻底卸载之前安装的MySQL 8.0(避免残留冲突)[^1] 2. **下载安装包**: - 访问[MySQL 5.7下载页](https://dev.mysql.com/downloads/mysql/5.7.html) - 选择`Windows (x86, 32-bit), MSI Installer`版本(如图示) ![MySQL 5.7下载选项示例](https://dev.mysql.com/doc/refman/5.7/en/images/windows-installer-arch-option.png) 3. **运行安装向导**: - 选择`Custom`安装类型 → 勾选`MySQL Server 5.7.43`和`MySQL Workbench` - 配置root密码 → 设置服务名(默认`MySQL57`) 4. **手动创建配置文件**: - 在安装目录(如`C:\Program Files\MySQL\MySQL Server 5.7`)下新建`my.ini` - 粘贴引用[3]中的配置模板(需修改`basedir`和`datadir`路径) 5. **验证安装**: ```bash mysql -u root -p # 输入密码后应进入MySQL命令行 ``` --- #### 四、常见问题规避 | 问题类型 | 解决方案 | |------------------|------------------------------------------------------------------------| | **安装失败** | 检查系统是否为纯32位 → 运行`cmd`输入`systeminfo`查看`系统类型` | | **连接超时** | 确认MySQL服务已启动(`services.msc`中检查`MySQL57`状态)[^3] | | **字符集乱码** | 确保`my.ini`中配置`character-set-server=utf8`并重启服务[^3] | --- #### 五、扩展建议 - **系统升级**:长期使用32位系统会限制软件生态,建议升级至Windows 10/11 64位 - **数据迁移**:若未来升级到64位系统,可通过`mysqldump`导出5.7数据并导入8.0[^4] 通过以上步骤,您可以在32位Windows系统中稳定运行MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值