本文主要是介绍mysql面试题 Day1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1 可以使用mysql直接存储文件吗?
2 什么时候存文件,什么时候不存文件?
3 存储文件,有遇到什么问题吗?
4 emoji 乱码怎么办?
5 如何存储ip地址?
1 可以使用mysql直接存储文件吗?
在MySQL中存储文件通常指的是将文件作为BLOB数据存入数据库中。
BLOB (binary large object):二进制大对象的字段类型 ,主要用于存储二进制大对象,例如可以存储图片,音视频等文件。
按照存储容量来分类,blob 类型可分为以下四种:
类型 | 存储大小 | 用途 |
---|---|---|
TINYBLOB | 0 - 255字节 | 短文本二进制字符串 |
BLOB | 0 - 65KB | 二进制形式的字符串 |
MEDIUMBLOB | 0 - 16MB | 二进制形式的长文本数据 |
LONGBLOB | 0 - 4GB | 二进制形式的极大文本数据 |
其中最常用的就是 blob 字段类型了,最多可存储 65KB 大小的数据,一般可用于存储图标或 logo 图片。不过数据库并不适合直接存储图片,如果有大量存储图片的需求,请使用对象存储或文件存储,数据库中可以存储图片路径来调用。
2 什么时候存文件,什么时候不存文件?
存:
-
小型文件和少量文件:
MySQL 可以存储小型文件,比如少于几兆字节的文件,而不会显著增加数据库的负担。
不存:
-
大型文件和大量文件:
MySQL 并不适合存储大型文件(比如几十兆字节以上)或者大量的文件,因为这样会显著增加数据库的存储和管理负担,降低数据库的性能。 -
文件频繁更新:
如果文件需要频繁更新或替换,存储在数据库中会导致数据库的性能瓶颈,因为每次更新都会导致整个文件数据的写入和数据库的日志记录。 -
需要外部访问和处理:
如果文件需要由外部程序直接访问或处理,将文件存储在数据库中可能会增加额外的复杂性和开销,不如直接存储文件路径来得简单和高效。 -
存储要求高:
数据库系统的存储空间有限,如果存储大量文件可能会超出数据库的存储能力,不如使用专门的文件系统或对象存储服务来存储文件。
3 存储文件,有遇到什么问题吗?
-
文件大小超过限制:
-
解释:MySQL有内置的文件大小限制,例如
max_allowed_packet
。 -
解决方法:调整
my.cnf
或my.ini
配置文件中相关参数的值,以支持更大的文件。
-
-
权限问题:
-
解释:MySQL进程没有足够的权限去写入文件到指定目录。
-
解决方法:修改文件目录权限,确保MySQL进程可以读写该目录。
-
4 emoji 乱码怎么办?
使用utf8mb4
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,一般情况下使用utf8也就够了。
5 如何存储ip地址?
-
使用字符串
-
使用无符号整型
使用字符串注意:
- 如果你需要支持IPv6地址,那么最长可能是39个字符,因此可以考虑使用
VARCHAR(39)
使用无符号整型注意:
-
支持范围查询
-
ipv4 使用 INET_ATON() 和 INET_NTOA()
-
ipv6 使用 INET6_ATON() 和 INET6_NTOA()
这篇关于mysql面试题 Day1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!