MySQL数据库(字符编码与配置文件|存储引擎|字段类型)

本文详细介绍了MySQL数据库的基础知识,包括字符编码设置、存储引擎MyISAM、InnoDB、MEMORY和BlackHole的区别,以及创建表的语法、整型、浮点型、字符类型(CHARvsVARCHAR)、数字含义、枚举与集合、日期类型等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL数据库

一、字符编码与配置文件

		\s 			查看数据库基本信息
	show engines 	查看所有的存储引擎
	char_length() 	统计字段数据长度
	
	以下是WIN版本
		我们MySQL刚安装完 发现创建表记录的时候写入字符串Varchar 查看结果乱码
		解决方法如下:
			拷贝my-default.ini 					# windows下MySQL默认的配置文件
			拷贝上述文件并且重命名my.ini			#(随机取名 看见一大堆英文不要慌)
			由于5.6版本编码不统一 会造成乱码 我们需要统一修改>>>: Utf8
			[mysqld]							# Mysqld 服务端 
			    character-set-server=utf8		# 编码改成utf8  也可以utf8mb4(mb4表示可以显示表情包)
			    collation-server=utf8_general_ci
			[client]							# 客户端编码改成utf8
			    default-character-set=utf8
			[mysql]								# mysql客户端端编码改成utf8
			    default-character-set=utf8
			    user='root'						# 为了每次登录不需要输入密码
			    passoword='123'					# 直接写入配置文件 输入mysql即可直接使用
			注意如果配置文件涉及到mysqld相关的配置修改 那么需要重启服务端才可以生效

	以下是MAC版本
		我们MySQL刚安装完 默认是全部都有加载好的 不需要去配置文件
		如果需要配置的话 只需要在 /etc/ 文件夹里面 创建一个文件后缀名cnf 内容跟以上win一样
		(注意该文件权限不能太高 写完之后改成只读 文本里面不要有空格 重启mysql即可)

二、存储引擎

存储引擎我们可以理解成针对相同的数据采用不同的存取策略(show engines;)

1.如何查看存储引擎

使用show engines;命令即可查看
在这里插入图片描述

2.重要的存储引擎

MyISAM

它是MySQL5.5版本及之前的版本默认的存储引擎,它的存取数据的速度很快,但是功能较少(不支持事务,支持表锁),数据安全性较低

InnoDB

它是MySQL5.6及之后的版本默认的存储引擎,存取数的速度没有MyISAM快,但是支持事务、行锁、外键等诸多功能,并且安全性较高

MEMORY

它是基于内存存储的,存取数据极快,但是有着断电数据丢失、重启服务端数据就丢失的特性(基于内存的都是如此)

BlackHole

黑洞,任何写进去的数据都会立刻删除,类似于垃圾站

演示
	ps:MySQL中默认是大小写不敏感的(忽略大小写)
	格式:
		create table t1(id int)engine=MyISAM;
		create table t2(id int)engine=InnoDB;
		create table t3(id int)engine=MEMORY;
		create table t4(id int)engine=BlackHole;
	'ps:windows cmd终端鼠标右键的意思就是粘贴'
	
	'对于不同的存储引擎,硬盘中保存的文件个数也是不一样的'
	'''另外不同版本的数据库,里面的文件后缀也不一样,向5.6版本的存储表结构文件后缀则是.frm'''
	(以下以8.0的版本为准)
	MyISAM:3个文件
		.sdi 存储表结构
		.MYD 存储的是表数据
		.MYI 存索引(当成是字典的目录,加快查询速度)
	
	InnoDB:1个文件
		'在8.0版本中InnoDB不显示表结构文件,在5.6版本中显示'
		#.frm 存储表结构 (5.6版本中的显示)
		.ibd 存储数据和索引
	
	MEMORY:1个文件
		.sdi 存储表结构
	(断电或重启丢失数据)

	BlackHole:1个文件
		.sdi 存储表结构
	(放进去的数据立马丢失)

在这里插入图片描述

三、创建表的完善语法

	create table 库名.表名(字段名  字段类型(数字) 约束条件)engine=存储引擎;
						id		int 0~255	 default		MyISAM

	1.字段名和字段类型是必须的(至少写一个)
	2.数字跟约束条件是可选(可有可无) # not_null default
	3.约束条件可以写多个 空格隔开即可
	4.最后一个字段的结尾千万不能加逗号

四、字段类型之整型

整型分类及存储范围

在这里插入图片描述

	验证整型默认情况下是否携带正负号?
		create table ts1(id tinyint);
		insert into ts1 values(-129),(256)
	'发现自动填写两个边界值,数据失真,没有实际意义'
	'上述所有的整型类型默认都会带有负号'

在这里插入图片描述

	自定义移除负号
		'''unsigned 约束条件之一 意思是不需要负号'''
		create table ts1(id tinyint unsigned);
		insert into ts1 values(-129)(256);

在这里插入图片描述

五、字段类型之浮点型

在这里插入图片描述

'以下三者都可以存储浮点型数据,但是各自的精确度不一致'
	float 	double 	decimal 
	folat(255,30) # 总位数255位,小数点后占60位
	double(255,30) # 总位数255位,小数点后占60位
	decimal(65,30) # 总位数65位,小数点后占30位
	
	create table ts4(id float(255,30));
	create table ts5(id double(255,30));
	create table ts6(id decimal(65,30));
	insert into ts4 values(1.11111111111111);
	insert into ts5 values(1.11111111111111);
	insert into ts6 values(1.11111111111111);
	
'''三者的精确度不一样:decimal >>> double >>> float(精确到7位了)'''

在这里插入图片描述

六、字段类型之字符类型

1.研究两者区别

	char 定长
	'字符串中括号中得数字代表的就是字符串所存储的范围大小'
		char(4)
			最大只能存储四个字符,如果超出范围则直接报错
			如果不超出范围,则用空格填充至四个字符

	varchar 变长
		varchar(4)
			最大只能存储四个字符,如果超过范围则直接报错
			如果不超出范围,则有几位数就存几位


	'验证两者的区别'
	create table ts7(id int ,name char(4));
	create table ts8(id int, name varchar(4));
	'''
	结果验证 超出范围两者都会报错
	注意sql_mode='strict_trans_tables';
	'''
	
	'''如果你想超出范围之后,直接报错,需要设置严格模式'''

在这里插入图片描述

2.严格模式

	插入的数据值超出了数据类型的范围,不应该让其插入并自动修改,没有意义
	数据库应该直接报错(这个特性其实是有的,只是被我们改掉了>>>:配置文件)

	方式1:命令临时修改
		set session sql_mode='strict_trans_tables';
		'在当前客户端操作界面有效'
		set global sql_mode='strict_trans_tables';
		'在当前服务端有效(服务端不重启永久有效)'
	
	方式2:配置文件永久修改
		[mysqld]
			sql_mode='STRICT_TRANS_TABLES'(不区分大小写)

3.研究定长、不定长、是否补充空格

	'验证定长和变长特性'
	cahr_length() # 统计字段数据的长度
	
	create table ts7(id int ,name char(4));
	create table ts8(id int, name varchar(4));
	insert into ts7 values(1,'an');
	insert into ts8 values(2,'an');
	
	'验证是否补充了空格'
	# ps:char_length()获取字段存储的数据长度
	select char_length(name) from ts7;
	select char_length(name) from ts8;
	'''
	默认情况下MySQL针对char的存储会自动填充空格和删除空格
	然后再读取的时候优惠自动将填充的空格移除,如果想取消该机制
	需要设置严格模式。就可以看到填充了空格
	set global sql_mode='strict_trans_tables,pad_char_to_full_length'; 不区分大小写
	上述目录是替换,不是新增,所以之前的配置也要写上
	'''

在这里插入图片描述

4.char VS varchar

	char 
		优势:整存整取 速度快
		劣势:浪费存储空间
		
	varchar
		优势:节省存储空间
		劣势:存取数据的速度相较char慢

	'char与varchar的使用需要结合具体应用场景'

七、数字的含义

		数字大部分情况下都是用来限制字段的存储长度 但是整型除外
		不是用来限制存储的长度 而是展示的长度

		create table t13(id int(3)); 
		create table t14(id int(3) zerofill);  
		# zerofill 表示如果数据没有填写超过三位则以0补充支三位
		
		总结
			以后涉及到整型字段的定义 类型后面不需要加括号写数字 
			除非有业务需求必须固定位数

在这里插入图片描述

八、字段类型之枚举与集合

	枚举
		多选一
			eg:性别(男 女 其他)
		create table ts9(
			id int,
			name varchar(32),
			gender enum('male','female','others')
		);
	'只能选择里面的内容,如果没有的则报错'

	insert into ts9 values(1,'jack','boy');
	insert into ts9 values(1,'jack','male');

在这里插入图片描述

	集合
		多选多(包含多选一)
			eg:爱好(看小说,音乐,篮球)
		create table ts10(
			id int,
			name varchar(32),
			hobby set('read','music','basketabll')
		);
		
		'''只能选择里面的内容,如果没有的则报错'''
		insert into ts10 values(1,'jack','jump');
		insert into ts10 values(1,'jack','music');
		insert into ts10 values(2,'tom','read,music');

在这里插入图片描述

九、字段类型之日期类型

	 datetime 	   date    time 	 year
	 年月日时分秒  年月日  时分秒	  年

	create table ts11(
		id int,
		reg_time date,
		reg1_time datetime,
		reg2_time time,
		reg3_time year
	);

	insert into ts11 values(1,'2023-10-1','2023-11-11 11:11:11','11:11:11',2023);
	
	'ps:以后涉及到日期相关字段一般都是系统自动回去,无需我们可以操作'

在这里插入图片描述

<think>好的,用户现在问的是如何查看MySQL数据库字符编码。我需要先回顾之前的对话,用户之前问过varchar(2000)的汉字长度问题,涉及到了字符编码的影响。现在他想知道如何查看MySQL字符编码设置,可能是因为他在实际使用中遇到了编码问题,或者想确认自己的数据库配置是否正确。 首先,我需要确定用户的使用场景。用户可能是开发人员或者数据库管理员,他们需要确认数据库、表或字段的字符编码,以确保数据存储正确,避免乱码问题。用户的真实需求可能是要检查当前MySQL服务器的编码设置,或者某个特定数据库、表的编码,进而进行相应的调整。 接下来,我需要考虑用户可能不了解的不同查看方法。例如,用户可能知道通过SQL语句查询,但可能不知道具体的系统变量或信息模式表。或者用户可能需要分层次的查看方式,从服务器级别到数据库、表、字段级别逐步深入。 然后,我需要确保回答的结构清晰,分步骤说明不同的方法。比如使用SHOW VARIABLES命令查看全局设置,使用information_schema查询具体数据库或表的编码,以及通过status命令查看连接相关的编码。同时,需要注意不同版本的MySQL可能有细微差别,比如8.0版本后某些默认值的改变,但用户可能使用的是较旧的版本,所以需要涵盖通用的方法。 另外,用户可能还需要了解如何修改字符编码,但当前问题只是查看,所以是否需要简要提及修改方法作为扩展?根据用户之前的提问,可能暂时不需要,但可以给出提示,如果有需要可以进一步说明。 还要注意避免使用过于专业的术语,用简单的中文解释每个步骤的作用,比如解释character_set_server和collation_server的含义,以及连接相关的变量如character_set_client和character_set_connection的重要性,特别是当应用程序和数据库交互时这些设置的影响。 最后,需要总结重点,提醒用户检查多个层次的编码设置,并注意客户端连接的编码是否一致,以预防乱码问题。可能用户在实际操作中遇到了乱码,想通过检查编码设置来排查问题,因此强调一致性是关键。</think>查看 MySQL 数据库字符编码可通过以下方法实现,需区分**服务器全局设置**、**数据库级设置**和**表/字段级设置**: --- ### 一、查看服务器全局字符编码 执行以下 SQL 命令查看全局编码配置: ```sql SHOW VARIABLES LIKE 'character_set_%'; SHOW VARIABLES LIKE 'collation_%'; ``` 关键参数说明: - `character_set_server`:服务器默认字符集 - `character_set_database`:新建数据库的默认字符集 - `character_set_client`:客户端请求的字符集 - `character_set_connection`:连接层字符集 - `collation_server`:服务器默认排序规则 --- ### 二、查看具体数据库字符编码 ```sql SELECT SCHEMA_NAME AS '数据库名', DEFAULT_CHARACTER_SET_NAME AS '字符集', DEFAULT_COLLATION_NAME AS '排序规则' FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '你的数据库名'; ``` --- ### 三、查看表/字段的字符编码 1. **查看表的编码**: ```sql SHOW CREATE TABLE 表名; ``` 输出结果中会显示 `DEFAULT CHARSET=...`。 2. **查看字段的编码**: ```sql SELECT COLUMN_NAME AS '字段名', CHARACTER_SET_NAME AS '字符集', COLLATION_NAME AS '排序规则' FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '你的数据库名' AND TABLE_NAME = '表名'; ``` --- ### 四、查看当前连接的编码 ```sql STATUS; ``` 输出结果中的 `Connection` 部分会显示客户端和服务器的字符集设置。 --- ### 五、配置文件位置(扩展) MySQL 的默认编码通常在配置文件中设置: - Linux:`/etc/my.cnf` 或 `/etc/mysql/my.cnf` - Windows:`my.ini` 配置示例: ```ini [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci ``` --- ### 总结 1. 优先通过 `SHOW VARIABLES` 检查全局编码设置 2. 使用 `information_schema` 查看具体数据库/表/字段的编码 3. 若发现编码不一致,需调整配置文件或重建数据库对象 4. **特别注意**:客户端连接编码(如 JDBC、Python 驱动)需数据库编码一致,否则会导致乱码!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值