首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

那些坑人乱码问题(下)

使用MySQL时经常会遇到乱码问题,尤其是涉及到中文和emoji表情符号时,然而当我查询资料时发现大多数资料几乎雷同,寥寥几句仅贴了几个参数定义,并没有案例来详细说明,因此利用几个周末时间整理出这个编码系列博客...,希望能对和我同样深受编码困扰的人提供些帮助,当然能力有限,里面很多观点是根据各种资料推测,并没有相关文档中找到确切描述佐证,可能有理解偏颇之处。...定义 下面一段描述摘自网上,也是被粘贴复制最多一部分内容,这里先贴出来,执行如下语句查询数据库编码相关参数: show variables like 'character%' 查询结果如下: 这三个参数我们可以不用关心...然而依然没有回答为什么要多这一个过程,找遍资料也没有找到确切结论,按照个人理解:尽管我们大多数情况下执行SQL语句都是对数据表做操作,但依然有情况我们执行语句和数据表无关,例如select ‘...,因为MySQL将有编码意义数据流转换为无编码意义二进制数据时候并不做实际数据转换,而从二进制数据准换为带编码数据时又会用目标编码做一次编码转换校验,利用这两个特性就可以实现在MySQL内部模拟了一次

1.9K20

现代后端开发者必备技能——2018 版

今天Web开发与几年前完全不同,有很多不同东西可以很容易地阻止任何人进入Web开发。...你可以在下面的图片中找到详细路线图,但是也将在下面的描述中解释每一步。 下图如果看着不清楚,可以看这里 -> 原图地址 ? 我们来分解它,并解释下面部分中每一步。...已经将它们分成几类,以便你更容易做出决定。对于刚开始进入后端开发初学者,建议你选择任何脚本语言,因为它们有很多需求,它可以让你快速起步。...第2步 - 练习你学到东西 没有比实践更好学习方式。一旦你选择了你语言,并且对这些概念有了基本了解,就可以使用它们你所能制作尽可能多小应用程序。...还要确保移植包括测试在内所有内容。 第13步 - 学习NoSQL数据库 首先了解它们是什么,它们与关系数据库有何不同以及为什么它们是需要。有几种不同选择,研究一点看看,并比较它们特点和差异。

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL面试常问:一条语句提交后,数据库都做了什么?

现在流行开源数据库,非 MySQL 莫属,面试中 MySQL 也是必问,于是就学习了专栏《MySQL实战45讲》,今天文章试着回答以下两个问题: 1、一条 SQL 语句提交到数据库之后,数据库都会执行哪些动作...内存资源是比较昂贵,不用的话就要被清理。如果不做任何操作,一定时间之后(默认是 8 小时),连接器会自动断开,此时再查询就会报错。 一个比较好方案是使用数据库连接池。...Python 编程可以使用第三方库 DBUtils 来管理数据库连接池。 查询缓存 缓存可以快速返回命中查询使用上感受就是同一个 SQL,第二次查询结果是立刻显示。...查询缓存中以 SQL 语句作为 KEY,查询结果作为 VALUE。 如果你查询能够直接在这个缓存中找到 key,并且具有对该表相应权限,那么这个 value 就会被直接返回给客户端。...如果没有找到,会走接下来流程,一旦查到结果结果还是会保存在查询缓存中。

89320

数据库优化 6. 启用MySQL查询缓存

`deleted` = 0;   查询结果: 从explain结果来看,整个语句索引设计是没有问题, 下面来看看这几个字段你含义: id 理解是SQL执行顺序标识,SQL从大到小执行...,看到是derivedx(x是个数字,理解是第几步执行结果) 这里显示是表别名 type 表示MySQL中找到所需行方式,又称“访问类型”。...possible_keys 指出MySQL能使用哪个索引中找到记录,查询涉及到字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示次序。...这个步骤, 能够得出结论是, 这个sql语句使用了缓存, 缓存字段是product_id, 但是并没有显示出为什么会这么慢 3....这里关键是为什么要收集数据,原因在于:mysql使用“索引”完成查询结束后,mysql得到了一堆行id,如果有的列并不在索引中,mysql需要重新到“数据行”上将需要返回数据读取出来返回个客户端。

2.1K30

MySQL数据库层优化基本概念

对于字符串,它要么是空字符串,要么是可以存储列中字符串。 所有计算出表达式都返回一个可以代替信号错误状态使用值。例如,1/0返回NULL。...crash-me可以提供信息类型一个示例是,如果您希望能够使用Informix或DB2,则不应使用长度超过18个字符列名。 碰撞程序和MySQL基准都非常独立于数据库。...通过查看它们编写方式,您可以了解为使自己应用程序数据库独立而必须执行操作。可以MySQL源分发sql-bench目录中找到这些程序。它们是用Perl编写,并使用DBI数据库接口。...通过启用查询缓存,服务器处理确定是否可以重用查询结果详细信息。这简化了您应用程序。 我们将MySQL用于什么 本节介绍了MySQL早期应用程序。...MySQL基准套件 该基准套件旨在告诉任何用户,给定SQL实现执行操作好坏。通过查看任何MySQL源代码发行版中sql-bench目录中代码和结果可以很好地了解基准测试工作方式。

1.4K20

A little fun with InnoDB multi-versioning(14.有关InnoDB多版本中一个小问题)

管我读事务不能看到写入事务插入和随后修改任何行,但为了弄清楚这一点,它需要将所有的undo记录应用到遇到每一行(每行10条)。当然,这需要时间。...令人怀疑是,> 500000条件大约只需要扫描所有行一半时间(因为它只需要做一半工作)。当然,所有这些查询返回一个空集。...对现实世界适用性 虽然几乎没有人会故意做脚本所做事情,但我以前在生产系统中确实看到过这样结果:一个非常大事务多次更新一行会导致试图访问该表许多慢速查询。有些查询会很快,有些则很慢。...对系统管理员和dba有严重影响 undo历史记录形式对用户可以使用空间没有限制。...已经提交了MySQL Bug #72362:“用户可以无限制地使用undo space”,建议添加配置选项来限制用户可能消耗undo space。

37830

面试官:谈谈你对mysql索引认识?

于是呢,决定再来一个mysql数据库专题,这篇我们就来谈谈关于索引方面的mysql面试题。还是老规矩,讲的是Innodb存储引擎下情形,毕竟还真没用过Mysiam之类存储引擎。...粉丝:"….." 嗯,这道题其实很基础。但是有没有做过,这题是可以看出来。...因为 mysql 数据库引擎会在找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕。 然而大多数情况下,业务SQL十分复杂,没法优化。所以就要建立索引了。...唯一索引找到满足条件第一条记录后,直接返回,不用判断下一条记录了。 5、mysql索引是什么结构?用红黑树可以么? 这个妥妥答最常见B+ Tree。...注意一下B+ tree两个明显特点 数据只出现在叶子节点 所有叶子节点增加了一个链指针 接下来就可以开始编了~~比如数据库索引采用B+ tree主要原因是B Tree提高了磁盘IO性能同时并没有解决元素遍历效率低下问题

89530

面试官:谈谈你对 MySQL 索引认识?

于是呢,决定再来一个mysql数据库专题,这篇我们就来谈谈关于索引方面的mysql面试题。还是老规矩,讲的是Innodb存储引擎下情形,毕竟还真没用过Mysiam之类存储引擎。...粉丝:"….." 嗯,这道题其实很基础。但是有没有做过,这题是可以看出来。...因为 mysql 数据库引擎会在找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕。 然而大多数情况下,业务SQL十分复杂,没法优化。所以就要建立索引了。...唯一索引找到满足条件第一条记录后,直接返回,不用判断下一条记录了。 5、mysql索引是什么结构?用红黑树可以么? 这个妥妥答最常见B+ Tree。...注意一下B+ tree两个明显特点 数据只出现在叶子节点 所有叶子节点增加了一个链指针 接下来就可以开始编了~~比如数据库索引采用B+ tree主要原因是B Tree提高了磁盘IO性能同时并没有解决元素遍历效率低下问题

98220

如何在Ubuntu 16.04上使用MySQL全文搜索提高搜索效果

但是,这些请求往往大型数据集上表现不佳。它们也仅限于精确匹配用户输入,这意味着即使存在包含相关信息文档,查询也可能不会产生任何结果。...本教程中,您将使用MySQL 5.6使用全文搜索来查询数据库,然后根据它们与搜索输入相关性来量化结果,并仅显示最佳匹配。...您可以通过更改关键字来查看结果来尝试其他搜索。 现在您可以SQL查询中使用FTS函数来查找与搜索输入相关行,您可以使这些结果更具相关性。...您可以更改截止值以继续微调结果。例如,如果您使用0.1 而不是0截止,则仅返回第2行。 使用IN BOOLEAN 第二步中,您在指定查询字词时使用了默认IN NATURAL LANGUAGE模式。...您在为文档驱动数据库构建数据库模式时创建了索引,然后查询时使用特殊运算符查找最相关结果。您也可以直接使用MySQL数据库减少配置环节。

2.4K40

面试官:谈谈你对mysql索引认识?

粉丝:"….." 嗯,这道题其实很基础。但是有没有做过,这题是可以看出来。...因为 mysql 数据库引擎会在找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕。 然而大多数情况下,业务SQL十分复杂,没法优化。所以就要建立索引了。...首先,《阿里巴巴JAVA开发规范》中有这么一段话 【强制】业务上具有唯一特性字段,即使是多个字段组合,也必须建成唯一索引 说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略...唯一索引找到满足条件第一条记录后,直接返回,不用判断下一条记录了。 5、mysql索引是什么结构?用红黑树可以么? 这个妥妥答最常见B+ Tree。...注意一下B+ tree两个明显特点 数据只出现在叶子节点 所有叶子节点增加了一个链指针 接下来就可以开始编了~~比如数据库索引采用B+ tree主要原因是B Tree提高了磁盘IO性能同时并没有解决元素遍历效率低下问题

88120

SQL语句逻辑执行过程和相关语法详解

虽然某些书上、网上给出了一些顺序(个人所知道比较权威,是SQL Server"圣书"技术内幕里介绍过),但在任何一种数据库系统官方手册上都没有关于这方面的介绍文档。...SQL Server和Oracle语句逻辑处理顺序上是一致,在这方面,它们严格遵守了标准SQL要求,任何一个步骤都遵循了关系型数据库范式要求。...本文也多处通过这两个模型来分析为什么标准SQL不允许某些语法,以及为什么MySQL可以支持这些"不标准"语法。 1.2 各数据库系统语句逻辑处理顺序 以SELECT语句为例。...SQL中没有使用ORDER BY时,有不少子句返回结果(虚拟表)都是随机,因为实在没办法去保证顺序,但却又要求返回数据。...MySQL、mariadb总是"偷奸耍滑",本无法满足关系型数据库范式时候,它们总是挑选一个随机单行数据出来,让返回结果满足范式要求,最典型就是group by处理方式。

3.4K20

MySQL开发规范.pdf

4、 禁止在数据库中存储明文密码 如果需要存储 MySQL 密码可以MySQL 内置函数 password()对明文密码进行 MD5 进行加密。...6、 禁止使用 VARBINARY、BLOB 存储图片、文件等,使用 VARCHAR(N),N 量可能小 7、 禁止列上进行运算 列上运算将导致 Mysql 索引失效而进行全表扫描。...如果有表情符号需求可以使用 utf8mb4 2、表必须有主键,推荐使用 UNSIGNED 自增列作为主键 表没有主键,INNODB 会默认设置隐藏主键列;没有主键定位数据行时效率会非常低而且降低基于行复制效率...5、建议不要使用子查询 对于子查询mysql 会对子查询结果返回给外部表,并对外部表进行全表扫描 6、建议将大字段、访问频率低字段拆分到单独表中存储,分离冷热数据 当我们表中存在类似于 TEXT...,并且对于目前数据量存储过程、触发器、函数等没有任何优势(存储过程、函数对大数据量处理和复杂业务逻辑很有优势),而且 mysql 存储过程还有一定 BUG。

70010

备忘单:提升你 MariaDB 和 MySQL 数据库技能

这就是设计数据库目的,而 MariaDB(由 MySQL 原始开发人员开发一个分支) 是一个极佳选项。本文中使用是 MariaDB,但这些信息同样适用于 MySQL。...然而,使用这些库之前,理解数据库引擎做了什么以及为什么选择数据库是重要对我们会很有帮助。本文介绍 MariaDB 和 mysql 命令来帮助你熟悉数据库处理数据基本原理。...如果你还没有安装 MariaDB,请查阅文章 Linux 上安装 MariaDB。如果你没有使用 Linux,请参照 MariaDB 下载页面提供指导方法。...学习 SQL 基本知识 结构化查询语言是基于它们能力定义:一种通过有规则且一致语法来查询数据库内容以得到有用结果方法。SQL 看起来像是普通英文语句,有一点点生硬。...例如,新用户 tux 对这个数据库没有任何权限。使用 WHERE 语句你可以只查 tux 那一条记录。

1.4K20

MYSQL 优化常用方法

1、选取最适用字段属性 MySQL可以很好支持大数据量存取,但是一般说来,数据库表越小,它上面执行查询也就会越快。...对于某些文本字段,例如“省份”或者“性别”,我们可以它们定义为ENUM类型。因为MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来速度要比文本类型快得多。...例如,我们要将客户基本信息表中没有任何订单客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单客户ID取出来,然后将结果传递给主查询, 如下所示: DELETE FROM customerinfo...7、使用索引 索引是提高数据库性能常用方法,它可以数据库服务器以比没有索引快得多速度检索特定行,尤其是查询语句当中包含有MAX(), MIN()和ORDERBY这些命令时候,性能提高更为明显...所以,下面的两个查询虽然返回结果一样,但后者要比前者快得多。

93940

mySQL优化方案

1、选取最适用字段属性 MySQL可以很好支持大数据量存取,但是一般说来,数据库表越小,它上面执行查询也就会越快。...对于某些文本字段,例如“省份”或者“性别”,我们可以它们定义为ENUM类型。因为MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来速度要比文本类型快得多。...例如,我们要将客户基本信息表中没有任何订单客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo...所以,下面的两个查询虽然返回结果一样,但后者要比前者快得多。    ...SELECT * FROM books    WHERE name like "MySQL%"    但是如果换用下面的查询返回结果一样,但速度就要快上很多:    SELECT * FROM books

93680

MySQL数据库面试题和答案(一)

Mysql_fetch_object作为对象返回数据库结果,而mysql_fetch_array作为数组返回结果。这将允许通过字段名访问数据。...mysql_fetch_row($result):其中$result是使用mysql_query()函数执行成功查询返回结果资源。...可以用来匹配任何单个字符。“|”可以用来匹配这两个字符串中任何一个。 如何在MySQL中将表导出为XML文件?...备份mysql是一种很好做法,因为它包含用户可以访问所有数据库信息。使用该命令时,要注意在-p开关和密码之间不应该有任何空格,如果有的话,就会出现语法错误。...需要一个PHP脚本来存储和检索数据库值。 30、为什么要在数据库中使用CHAR而不是VARCHAR ? CHAR使用起来更加准确和高效。CHAR不需要保留变量长度计数。

7.5K31

MySQL基本操作

1.1 MySQL 服务 1.1.1 启动 / 关闭 ☞ 图形化操作 命令行中执行 services.msc,打开服务,服务中找到 MySQL 服务,左侧或者右击选项中对 MySQl服务进行操作...☞ 命令行操作 打开命令行执行 net stop mysql可以停止 MySQL 服务,但是这里提示服务名无效,这是因为服务名是 MySQL57 不是 MySQL。...然后执行 net start mysql,就可以启动 MySQL 服务,同理此处服务名也要和自己对应,就执行 net start mysql57。perfect,启动成功! ?...1.2.2 数据库操作 ☞ 查询所有数据库 登录 MySQL 后执行 show databases; 就可以查询出该数据库中所有的库。注意:MySQL 语句后要加 ; 否则认为该语句未完结。 ?...② 当某一列值全是 NULL 时,count(col)返回结果为 0,但 sum(col)返回结果为NULL,因此使用 sum()时需注意 NPE 问题。

1.2K30

MySQL数据库优化八种方式(经典必看)

对于某些文本字段,例如“省份”或者“性别”,我们可以它们定义为ENUM类型。因为MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来速度要比文本类型快得多。...例如,我们要将客户基本信息表中没有任何订单客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo...7、使用索引 索引是提高数据库性能常用方法,它可以数据库服务器以比没有索引快得多速度检索特定行,尤其是查询语句当中包含有MAX(),MIN()和ORDERBY这些命令时候,性能提高更为明显。...所以,下面的两个查询虽然返回结果一样,但后者要比前者快得多。 第三,搜索字符型字段时,我们有时会使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价。...SELECT * FROM books WHERE name like"MySQL%" 但是如果换用下面的查询返回结果一样,但速度就要快上很多: SELECT * FROM books WHERE

68520

MySQL数据库优化

1、选取最适用字段属性 MySQL可以很好支持大数据量存取,但是一般说来,数据库表越小,它上面执行查询也就会越快。...对于某些文本字段,例如“省份”或者“性别”,我们可以它们定义为ENUM类型。因为MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来速度要比文本类型快得多。...例如,我们要将客户基本信息表中没有任何订单客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo...所以,下面的两个查询虽然返回结果一样,但后者要比前者快得多。 •第三,搜索字符型字段时,我们有时会使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价。...SELECT    *    FROM    books WHERE    name    like"MySQL%" 但是如果换用下面的查询返回结果一样,但速度就要快上很多: SELECT    *

1.6K20
领券