小程序里的题库越来越丰富了,最近上新了不少 MySQL 面试题。其中有一些面试题不常见,但却是 BAT 必问的面试题。今天我抽一些面试题考考大家!

1、MySQL 中的 latin1 是什么字符集?

这个字符集相信大家都见过,一般在创建数据库的时候会进行设置。它在 Java 中代表的就是 ISO-8859-1。共收录256个字符,是在ASCII 字符集的基础上又扩充了 128 个西欧常用字符(包括德法两国的字母),也可以使用 1 个字节来进行编码。ISO-8859-1 这个字符集在 MySQL 中的别名就是 latin1。

2、为什么我们通常推荐使用 utf8mb4 字符集?

这个很多文章都写过,说使用 utf8 会出问题,比如当我们存储 emoji 表情时,会出现无法存入的问题。但是没有人从原理上来说为什么会丢失。这个我们可以通过 SHOW CHARSET like ‘utf8%’; 命令查看一下 utf8 和 utf8mb4 的区别。

之所以无法存储的原因就是,UTF-8 编码有可能是两个、三个、四个字节。Emoji 表情是 4 个字节,而 Mysql 的 utf8 编码最多 3 个字节,所以数据插不进去。

3、表 xttblog 存在且该表中不存在 name 字段,那么执行 select * from xttblog where name = ‘业余草’ 肯定会报错,请问是在连接器,分析器,优化器,执行器等哪个阶段报错?

这个题是我昨天发在微信群里的一个题,很多人答错。答案是分析器。因为,连接器是负责处理管理连接,权限验证的;分析器是进行词法分析,语法分析的;优化器是进行语句优化,生成执行计划,选择索引的;执行器是真正执行 SQL 语句的,并返回结果集的。所以,回答分析器才是对的。

4、MySQL 5.8 中为什么把查询缓存这一块移除了?

这个查询缓存,这一块估计很多人都没注意到。新版本的 5.8 版本的 MySQL 数据库已经移除了查询缓存这一块的设计。而且在 5.7 版本中也不推荐使用了。移除的原因是,虽然查询缓存有时候能比较快的返回数据,但是维护起来太麻烦了。而且缓存命中率太低了。如果对应的表有 insert、update、delete 等,那么缓存就得失效。如果查询语句中有函数,则放弃查询缓存。因为函数会设计的计算等有太多的不确定性。还有一些函数根本不能缓存,或没必要缓存。比如,select now() 就不能缓存,再比如,select version() 就没必要缓存。综合考虑,MySQL 把它给移除了。


©著作权归作者所有:来自51CTO博客作者mob604756f5e525的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 关于api接口以及页面数据通信域名,缓存cdn设置优化
  2. (lintcode)第24题 LFU缓存
  3. 使用腾讯云提供的针对Nuget包管理器的缓存加速服务
  4. Linux内存、Swap、Cache、Buffer详细解析
  5. mysql的数据类型和字符集
  6. BlueStore源码分析之Cache
  7. 在java中构建高效的结果缓存
  8. CPU缓存L1/L2/L3工作原理
  9. Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存

随机推荐

  1. AndroidRelativeLayout属性大全
  2. Android Measure 体系简单总结
  3. Android接入WebView(四)——浏览器书签与历
  4. Android(安卓)不同View ID相同
  5. TextView的常用属性
  6. 如何在android app中使用STL库
  7. android 实现FlowLayout 流线布局(自定义V
  8. android 中的全局变量问题
  9. Android布局中的常用属性小结
  10. android studio 使用gradle 导出jar包,并