目录
A.1.1。 |
哪个版本的MySQL是生产就绪的(GA)? |
MySQL 8.0,5.7和MySQL 5.6支持生产使用。 MySQL 8.0在MySQL 8.0.11中实现了一般可用性(GA)状态,该版本于2018年4月19日发布,用于生产。 MySQL 5.7使用MySQL 5.7.9实现了一般可用性(GA)状态,该版本于2015年10月21日发布,用于生产。 MySQL 5.6使用MySQL 5.6.10实现了一般可用性(GA)状态,该版本于2013年2月5日发布,用于生产。 MySQL 5.5使用MySQL 5.5.8实现了通用可用性(GA)状态,该版本于2010年12月3日发布,用于生产.MySQL 5.5系列不再是最新的,但仍在生产中得到支持。 MySQL 5.1通过MySQL 5.1.30实现了一般可用性(GA)状态,该版本于2008年11月14日发布用于生产.Microsoft 5.1的主动开发已经结束。 MySQL 5.0使用MySQL 5.0.15实现了通用可用性(GA)状态,该版本于2005年10月19日发布,用于生产.Microsoft 5.0的主动开发已经结束。 |
|
A.1.2。 |
为什么MySQL版本编号跳过版本6和7并直接进入8.0? |
由于我们在这个MySQL版本中引入了许多新的和重要的功能,我们决定开始一个全新的系列。 由于系列号6和7实际上已经被MySQL使用过,所以我们去了8.0。 |
|
A.1.3。 |
MySQL 8.0可以做子查询吗? |
是。 请参见 第13.2.11节“子查询语法” 。 |
|
A.1.4。 |
MySQL 8.0可以执行多表插入,更新和删除吗? |
是。 有关执行多表更新所需的语法,请参见 第13.2.12节“UPDATE语法” ; 对于执行多表删除操作所需的操作,请参见 第13.2.2节“DELETE语法” 。
可以使用触发器来完成多表插入,该
|
|
A.1.5。 |
MySQL 8.0是否有序列? |
不过。但是,MySQL有一个
|
|
A.1.6。 |
MySQL 8.0是否具有
|
是,请参见 第11.3.5节“时间值中的小数秒” 。 |
|
A.1.7。 |
MySQL 8.0是否适用于多核处理器? |
是。 MySQL是完全多线程的,如果操作系统支持它,它将使用多个CPU。 |
|
A.1.8。 |
为什么我会看到多个进程
|
使用LinuxThreads时,您应该看到至少 运行 三个 mysqld 进程。 这些实际上是线程。 LinuxThreads管理器有一个线程,一个线程用于处理连接,一个线程用于处理警报和信号。 |
|
A.1.9。 |
MySQL 8.0可以执行ACID事务吗? |
是。
所有当前的MySQL版本都支持事务。
该
该
|
A.2.1。 |
我在哪里可以获得MySQL存储引擎的完整文档? |
请参见
第16章,
备用存储引擎
。
该章包含有关除
|
|
A.2.2。 |
MySQL 8.0中是否有新的存储引擎? |
No.
|
|
A.2.3。 |
是否已在MySQL 8.0中删除任何存储引擎? |
为了支持给定表的分区,用于表的存储引擎现在必须提供其自己的(
“
本机
”
)分区处理程序。
|
|
A.2.4。 |
我可以阻止使用特定的存储引擎吗? |
是。
的
|
|
A.2.5。 |
与非
存储引擎
|
是。
|
|
A.2.6。 |
|
该
|
A.3.1。 |
什么是服务器SQL模式? |
服务器SQL模式定义MySQL应支持的SQL语法以及应执行的数据验证检查。 这使得在不同环境中使用MySQL以及将MySQL与其他数据库服务器一起使用变得更加容易。 MySQL服务器将这些模式分别应用于不同的客户端。 有关更多信息,请参见 第5.1.11节“服务器SQL模式” 。 |
|
A.3.2。 |
有多少服务器SQL模式? |
每种模式都可以独立开启和关闭。 有关 可用模式的完整列表, 请参见 第5.1.11节“服务器SQL模式” 。 |
|
A.3.3。 |
您如何确定服务器SQL模式? |
您可以
使用该
选项
设置默认SQL模式(对于
mysqld
启动)
|
|
A.3.4。 |
模式是否依赖于数据库或连接? |
模式未链接到特定数据库。
模式可以在本地设置为会话(连接),也可以全局设置为服务器。
您可以使用更改这些设置
。
|
|
A.3.5。 |
可以延长严格模式的规则吗? |
当我们提到
严格的模式
,我们的意思是在模式中至少一者的模式
|
|
A.3.6。 |
严格模式会影响性能吗? |
输入数据的密集验证,某些设置比未完成验证需要更多时间。 虽然性能影响不是很大,但如果您不需要这样的验证(可能您的应用程序已经处理了所有这些),那么MySQL会为您提供禁用严格模式的选项。 但是,如果确实需要,严格模式可以提供此类验证。 |
|
A.3.7。 |
安装MySQL 8.0时,默认服务器SQL模式是什么? |
在MySQL 8.0的默认SQL模式包括以下模式:
有关所有可用模式和默认MySQL行为的信息,请参见 第5.1.11节“服务器SQL模式” 。 |
A.4.1。 |
MySQL 8.0是否支持存储过程和函数? |
是。 MySQL 8.0支持两种类型的存储例程,存储过程和存储函数。 |
|
A.4.2。 |
我在哪里可以找到MySQL存储过程和存储函数的文档? |
请参见 第24.2节“使用存储的例程” 。 |
|
A.4.3。 |
是否有MySQL存储过程的讨论论坛? |
是。 请参阅 https://forums.mysql.com/list.php?98 。 |
|
A.4.4。 |
在哪里可以找到存储过程的ANSI SQL 2003规范? |
不幸的是,官方规范不是免费提供的(ANSI使它们可以购买)。 但是,有一些书籍,如 SQL-99 Complete,真正 由Peter Gulutzan和Trudy Pelzer提供,它们提供了标准的全面概述,包括存储过程的覆盖范围。 |
|
A.4.5。 |
你如何管理存储的例程? |
对存储的例程使用明确的命名方案始终是一种好习惯。
您可以管理存储与程序
|
|
A.4.6。 |
有没有办法查看给定数据库中的所有存储过程和存储函数? |
是。
对于已命名的数据库
选择ROUTINE_TYPE,ROUTINE_NAME
来自INFORMATION_SCHEMA.ROUTINES
在哪里ROUTINE_SCHEMA ='
有关更多信息,请参见 第25.23节“INFORMATION_SCHEMA ROUTINES表” 。
可以使用
|
|
A.4.7。 |
存储过程存储在哪里? |
存储过程存储在
您还可以使用
|
|
A.4.8。 |
是否可以将存储过程或存储的函数分组到包中? |
不。在MySQL 8.0中不支持此功能。 |
|
A.4.9。 |
存储过程可以调用另一个存储过程吗? |
是。 |
|
A.4.10。 |
存储过程可以调用触发器吗? |
存储过程可以执行
|
|
A.4.11。 |
存储过程可以访问表吗? |
是。 存储过程可以根据需要访问一个或多个表。 |
|
A.4.12。 |
存储过程是否有引发应用程序错误的声明? |
是。
MySQL 8.0实现了SQL标准
|
|
A.4.13。 |
存储过程是否提供异常处理? |
MySQL
|
|
A.4.14。 |
MySQL 8.0存储例程能否返回结果集? |
存储过程
可以,但存储的功能不能。
如果
|
|
A.4.15。 |
是否
|
不在MySQL 8.0中。 |
|
A.4.16。 |
是否有一个MySQL相当于
|
在MySQL 8.0中没有等效的东西。 |
|
A.4.17。 |
我可以将数组作为输入传递给存储过程吗? |
不在MySQL 8.0中。 |
|
A.4.18。 |
我可以将游标作为
|
在MySQL 8.0中,游标仅在存储过程中可用。 |
|
A.4.19。 |
我可以将光标作为
|
在MySQL 8.0中,游标仅在存储过程中可用。
但是,如果不在a上打开游标
|
|
A.4.20。 |
我可以在存储的例程中打印出变量的值以进行调试吗? |
是的,您可以在
存储过程中
执行此操作
,但不能在存储的函数中执行此操作。
如果
|
|
A.4.21。 |
我可以在存储过程中提交或回滚事务吗? |
是。 但是,您无法在存储的函数中执行事务操作。 |
|
A.4.22。 |
MySQL 8.0存储过程和函数是否可以与复制一起使用? |
是的,在存储过程和函数中执行的标准操作从主MySQL服务器复制到从服务器。 第24.7节“存储程序二进制日志记录” 中详细描述了一些限制 。 |
|
A.4.23。 |
在主服务器上创建的存储过程和函数是否复制到从属服务器? |
是的,通过主服务器上的普通DDL语句创建的存储过程和函数将复制到从属服务器,因此这些对象将存在于两个服务器上。
|
|
A.4.24。 |
如何复制存储过程和函数中发生的操作? |
MySQL记录存储过程中发生的每个DML事件,并将这些单独的操作复制到从属服务器。 不会复制执行存储过程的实际调用。 更改数据的存储函数记录为函数调用,而不是每个函数内部发生的DML事件。 |
|
A.4.25。 |
将存储过程和函数与复制一起使用是否有特殊的安全要求? |
是。 由于从属服务器有权执行从主服务器的二进制日志中读取的任何语句,因此存在使用存储函数进行复制的特殊安全性约束。 如果复制或二进制日志记录(通常用于时间点恢复)处于活动状态,那么MySQL DBA有两个安全选项可供选择:
|
|
A.4.26。 |
复制存储过程和函数操作有哪些限制? |
嵌入在存储过程中的非确定性(随机)或基于时间的操作可能无法正确复制。
就其本质而言,随机产生的结果是不可预测的,并且无法准确再现,因此,复制到从属设备的随机动作不会反映在主设备上执行的操作。
声明存储的函数
此外,无法在从站上重现基于时间的操作,因为存储过程中此类操作的时间不能通过用于复制的二进制日志重现。 它仅记录DML事件,不考虑时序约束。
最后,在大型DML操作(例如批量插入)期间发生错误的非事务性表可能会遇到复制问题,因为主服务器可能会从DML活动中部分更新,但由于发生了错误,因此不会对从服务器进行更新。
解决方法是使用
|
|
A.4.27。 |
上述限制会影响MySQL进行时间点恢复的能力吗? |
影响复制的相同限制确实会影响时间点恢复。 |
|
A.4.28。 |
正在做些什么来纠正上述限制? |
您可以选择基于语句的复制或基于行的复制。 原始复制实现基于基于语句的二进制日志记录。 基于行的二进制日志记录解决了前面提到的限制。
也可以使用
混合
复制(通过启动服务器
有关其他信息,请参见 第17.2.1节“复制格式” 。 |
A.5.1。 |
我在哪里可以找到MySQL 8.0触发器的文档? |
请参见 第24.3节“使用触发器” 。 |
|
A.5.2。 |
是否有MySQL触发器的讨论论坛? |
是。 可在 https://forums.mysql.com/list.php?99 上找到它 。 |
|
A.5.3。 |
MySQL 8.0是否具有语句级或行级触发器? |
在MySQL 8.0中,所有触发器都是
|
|
A.5.4。 |
有没有默认触发器? |
没有明确。
MySQL确实对某些
|
|
A.5.5。 |
如何在MySQL中管理触发器? |
在MySQL 8.0中,可以使用
可以通过查询
|
|
A.5.6。 |
有没有办法查看给定数据库中的所有触发器? |
是。
您可以
SELECT TRIGGER_NAME,EVENT_MANIPULATION,EVENT_OBJECT_TABLE,ACTION_STATEMENT
来自INFORMATION_SCHEMA.TRIGGERS
在哪里TRIGGER_SCHEMA ='
有关此表的更多信息,请参见 第25.34节“INFORMATION_SCHEMA TRIGGERS表” 。
您还可以使用
|
|
A.5.7。 |
触发器存储在哪里? |
触发器存储在
|
|
A.5.8。 |
触发器可以调用存储过程吗? |
是。 |
|
A.5.9。 |
可以触发访问表吗? |
触发器可以访问其自己的表中的旧数据和新数据。 触发器也可以影响其他表,但不允许通过调用函数或触发器的语句修改已经使用(用于读取或写入)的表。 |
|
A.5.10。 |
表可以具有多个具有相同触发事件和动作时间的触发器吗? |
在MySQL 8.0中,可以为具有相同触发事件和操作时间的给定表定义多个触发器。
例如,您可以
|
|
A.5.11。 |
Can触发器可以通过UDF调用外部应用程序吗? |
是。
例如,触发器可以调用
|
|
A.5.12。 |
触发器是否可以更新远程服务器上的表? |
是。
可以使用
|
|
A.5.13。 |
触发器是否适用于复制? |
是。 但是,它们的工作方式取决于您使用的是MySQL的 “ 经典 ” 基于语句还是基于行的复制格式。 使用基于语句的复制时,从属服务器上的触发器由在主服务器上执行的语句执行(并复制到从服务器)。 使用基于行的复制时,由于在主服务器上运行并随后复制到从服务器的语句,因此不会在从服务器上执行触发器。 相反,使用基于行的复制时,在主服务器上执行由主服务器执行触发器引起的更改将应用于从服务器。 有关更多信息,请参见 第17.4.1.35节“复制和触发器” 。 |
|
A.5.14。 |
如何通过主服务器上的触发器复制到从服务器来执行操作? |
同样,这取决于您使用的是基于语句还是基于行的复制。
基于语句的复制。
首先,必须在从属服务器上重新创建主服务器上存在的触发器。
完成此操作后,复制流将像参与复制的任何其他标准DML语句一样工作。
例如,考虑一个
基于行的复制。 使用基于行的复制时,在主服务器上执行触发操作所引起的更改将应用于从服务器。 但是,在基于行的复制下,触发器本身实际上并未在从属服务器上执行。 这是因为,如果主设备和从设备都应用了来自主设备的更改,此外,导致这些更改的触发器应用于从设备,这些更改实际上会在从设备上应用两次,从而导致不同的数据主人和奴隶。 在大多数情况下,基于行和基于语句的复制的结果是相同的。 但是,如果在主服务器和从服务器上使用不同的触发器,则无法使用基于行的复制。 (这是因为基于行的格式将在主服务器上执行的触发器所做的更改复制到从服务器,而不是导致触发器执行的语句,并且不执行从服务器上的相应触发器。)相反,任何语句必须使用基于语句的复制来复制导致执行此类触发器的操作。 有关更多信息,请参见 第17.4.1.35节“复制和触发器” 。 |
A.6.1。 |
我在哪里可以找到有关MySQL视图的文档? |
请参见 第24.5节“使用视图” 。 |
|
A.6.2。 |
是否有MySQL Views的讨论论坛? |
A.6.3。 |
如果删除或重命名基础表,视图会发生什么? |
创建视图后,可以删除或更改定义所引用的表或视图。
要检查此类问题的视图定义,请使用该
|
|
A.6.4。 |
MySQL 8.0是否有表快照? |
没有。 |
|
A.6.5。 |
MySQL 8.0是否具有物化视图? |
没有。 |
|
A.6.6。 |
您可以插入基于联接的视图吗? |
如果您的
您 无法 在视图上插入单个插入的多个表。 |
A.8.1。 |
在哪里可以找到有关如何从MySQL 5.7迁移到MySQL 8.0的信息? |
有关详细的升级信息,请参见 第2.11节“升级MySQL” 。 升级时不要跳过主要版本,而是逐步完成流程,在每个步骤中从一个主要版本升级到下一个版本。 这可能看起来更复杂,但它会节省时间和麻烦。 如果您在升级期间遇到问题,则可以通过MySQL支持,或者如果您拥有MySQL Enterprise订阅,则可以更容易地识别它们的来源。 |
|
A.8.2。 |
MySQL 8.0中的存储引擎(表类型)支持如何从以前的版本中更改? |
存储引擎支持已更改如下:
|
A.9.1。 |
我在哪里可以找到解决MySQL安全问题的文档? |
最好的起点是 第6章, 安全性 。 关于特定安全问题,您可能会发现有用的MySQL文档的其他部分包括:
|
|
A.9.2。 |
MySQL 8.0中的默认身份验证插件是什么? |
MySQL 8.0中的默认身份验证插件是
该
有关可插入身份验证和其他可用身份验证插件的一般信息,请参见 第6.2.17节“可插入身份验证” 和 第6.4.1节“身份验证插件” 。 |
|
A.9.3。 |
MySQL 8.0是否具有SSL的本机支持? |
大多数8.0二进制文件都支持客户端和服务器之间的SSL连接。 请参见 第6.3节“使用加密连接” 。 如果(例如)客户端应用程序不支持SSL连接,您也可以使用SSH隧道连接。 有关示例,请参见 第6.3.7节“使用SSH从Windows远程连接到MySQL” 。 |
|
A.9.4。 |
是否在MySQL二进制文件中内置了SSL支持,或者我必须自己重新编译二进制文件以启用它吗? |
大多数8.0二进制文件都为启用,验证或两者兼容的客户端/服务器连接启用了SSL。 请参见 第6.3节“使用加密连接” 。 |
|
A.9.5。 |
MySQL 8.0是否具有针对LDAP目录的内置身份验证? |
企业版包括 PAM身份验证插件 ,支持针对LDAP目录的身份验证。 |
|
A.9.6。 |
MySQL 8.0是否包含对基于角色的访问控制(RBAC)的支持? |
不是在这个时候。 |
在下一节中,我们将回答有关MySQL NDB Cluster和
NDB
存储引擎的
常见问题
。
A.10.1。 |
哪个版本的MySQL软件支持NDB Cluster? 我是否必须从源代码编译? |
MySQL Server 8.0版本不支持NDB Cluster;
它作为单独的产品发布。
NDB Cluster 8.0现在可用作开发人员预览版,用于评估和测试
NDB Cluster 7.6基于MySQL Server 5.7和7.6版本的
有关部署和使用NDB Cluster的详细信息,请参见 第22章, MySQL NDB Cluster 8.0 。 |
|
A.10.2。 |
什么是 “ NDB ” 和 “ NDBCLUSTER ” 是什么意思? |
“
NDB
”
代表
“
N
etwork
D
ata
b
ase
”
。
|
|
A.10.3。 |
运行NDB群集需要多少台计算机?为什么? |
运行可行的群集至少需要三台计算机。 但是, NDB群集中 建议 的最小 计算机数量为四个:一个用于运行管理和SQL节点,另外两个用作数据节点。 两个数据节点的目的是提供冗余; 管理节点必须在单独的机器上运行,以保证在其中一个数据节点发生故障时继续进行仲裁服务。 要提供更高的吞吐量和高可用性,您应该使用多个SQL节点(连接到群集的MySQL服务器)。 运行多个管理服务器也是可能的(尽管不是绝对必要的)。 |
这组常见问题源于MySQL支持和开发小组在处理有关CJK(中日韩)问题的许多询问方面的经验。
A.11.1。 |
MySQL中有哪些CJK字符集? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CJK字符集列表可能因您的MySQL版本而异。
例如,
MySQL的> (有关更多信息,请参见 第25.2节“INFORMATION_SCHEMA CHARACTER_SETS表” 。)
MySQL支持的三个变种
GB
(
国嘉Biaozhun
,或
国家标准
,或
简体中国
)字符集这是在中国人民共和国官方:
有时候人们会尝试插入
在这里,我们试图准确地澄清哪些字符是合法的,
也可以将CJK字符存储在Unicode字符集中,尽管可用的排序规则可能不会像您期望的那样对字符进行排序:
用于Unicode字符集的排序规则决定了对集合中的字符进行排序(即区分)的能力:
此外,区分字符与按给定CJK语言的约定排序它们不同。
目前,MySQL只有一个特定于CJK的UCA排序规则
有关Unicode归类及其区分属性(包括补充字符的归类属性)的信息,请参见 第10.10.1节“Unicode字符集” 。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.2。 |
我已经将CJK字符插入到我的表中。
为什么
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
此问题通常是由于MySQL中的设置与应用程序或操作系统的设置不匹配。 以下是纠正这些类型问题的一些常见步骤:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.3。 |
使用Big5中文字符集时,我应该注意哪些问题? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MySQL支持Big5字符集,这在香港和台湾(中华民国)很常见。
MySQL
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.4。 |
为什么日语字符集转换失败? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MySQL的支持
在下面的转换表中,
现在考虑表格的以下部分。
这意味着MySQL将
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.5。 |
我应该怎么做,如果我想SJIS转换
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
我们的答案是:
“
?
“
。
有缺点此,许多人宁愿一个
“
松
”
的转换,从而使
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.6。 |
MySQL如何表示Yen(
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
会出现一个问题,因为日文字符集(包括某些版本
MySQL仅遵循JIS(日本工业标准)标准描述的一个版本。
在MySQL中,
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.7。 |
在MySQL中使用韩语字符集时,我应该注意哪些问题? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
从理论上讲,虽然已有多个版本的
MySQL的> |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.8。 |
为什么我会收到 错误的字符串值 错误消息? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
要查看问题,请创建一个包含一个Unicode(
MySQL的>
在非严格SQL模式下,尝试将稀有字符
mysql>
将
MySQL的>
所以这只是对该
mysql> SELECT ucs2,HEX(ucs2),gb2312,HEX(gb2312)FROM ch; + ------- + -------------- + -------- + ------------- + | ucs2 | HEX(ucs2)| gb2312 | 十六进制(gb2312)| + ------- + -------------- + -------- + ------------- + | A汌B | 00416C4C0042 | A?B | 413F42 | + ------- + -------------- + -------- + ------------- + 这里需要解释几件事:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.9。 |
为什么我的GUI前端或浏览器在我的应用程序中使用Access,PHP或其他API错误地显示CJK字符? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
使用
mysql
客户端
获取与服务器的直接连接
,并在那里尝试相同的查询。
如果
mysql
响应正确,则问题可能是您的应用程序接口需要初始化。
使用
mysql
告诉你它与语句一起使用的字符集或设置
<% Session.CodePage = 0 昏暗的strConnection 昏暗的康恩 strConnection =“driver = {MySQL ODBC 3.51 Driver}; server =
以同样的方式,如果您使用除
如果您使用的是PHP,请尝试以下方法: <?PHP $ link = new mysqli($ host,$ usr,$ pwd,$ db); if(mysqli_connect_errno()) { printf(“连接失败:%s \ n”,mysqli_connect_error()); 出口(); } $ link-> query(“SET NAMES'utf8'”); ?>
在这种情况下,我们使用的
PHP应用程序中经常遇到的另一个问题与浏览器的假设有关。
有时添加或更改
如果您使用的是Connector / J,请参阅 使用字符集和Unicode 。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.10。 |
我已升级到MySQL 8.0。 我怎样才能恢复到MySQL 4.0中关于字符集的行为? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
在MySQL版本4.0中, 服务器和客户端都有 一个 “ 全局 ” 字符集,并决定服务器管理员使用哪个字符。 这从MySQL版本4.1开始改变。 现在发生的是 “ 握手 ” ,如 第10.4节“连接字符集和排序”中所述 :
这样做的效果是你无法控制的客户端字符由开始设定
的mysqld
用
举例来说,假设您最喜欢的服务器字符集是
mysqld --character-set-server = latin1
然后使用默认字符集启动客户端
mysql --default-character-set = utf8
通过查看以下输出可以看到生成的设置
MySQL的>
现在停止客户端,并使用 mysqladmin 停止服务器 。 然后再次启动服务器,但这次告诉它跳过这样的握手: mysqld --character-set-server = utf8 --skip-character-set-client-handshake
MySQL的>
通过比较不同的结果可以看出,
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.11。 |
为什么一些
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
对于
+ ------------------------- + ----------------------- ---- + | OCTET_LENGTH(_utf8'A')| OCTET_LENGTH(_utf8'ペ')| + ------------------------- + ----------------------- ---- + | 1 | 3 | + ------------------------- + ----------------------- ---- +
如果我们不知道字符串中第一个字符的结束位置,我们就不知道第二个字符的开始位置,在这种情况下甚至可以进行非常简单的搜索,例如
这就是为什么MySQL不允许对不存在的字符进行编码的原因之一。 如果对拒绝错误输入不严格,则无法知道字符的结束位置。
对于
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.12。 |
我如何知道
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
大多数简体中文和基本非半宽带日语假名字符出现在所有CJK字符集中。
以下存储过程接受
DELIMITER // CREATE PROCEDURE p_convert(ucs2_char CHAR(1)CHARACTER SET ucs2) 开始 CREATE TABLE tj (ucs2 CHAR(1)字符集ucs2, utf8 CHAR(1)字符集utf8, big5 CHAR(1)字符集big5, cp932 CHAR(1)字符集cp932, eucjpms CHAR(1)字符集eucjpms, euckr CHAR(1)字符集euckr, gb2312 CHAR(1)字符集gb2312, gbk CHAR(1)字符集gbk, sjis CHAR(1)字符集sjis, ujis CHAR(1)字符集ujis); INSERT INTO tj(ucs2)VALUES(ucs2_char); UPDATE tj SET utf8 = ucs2, 中文= UCS2, CP932 = UCS2, eucjpms一起= UCS2, EUCKR = UCS2, GB2312 = UCS2, GBK = UCS2, SJIS = UCS2, UJIS = UCS2; / *如果存在转换问题,UPDATE会产生警告。* / SELECT hex(ucs2)AS ucs2, hex(utf8)AS utf8, hex(big5)AS big5, hex(cp932)AS cp932, hex(eucjpms)AS eucjpms, hex(euckr)AS euckr, hex(gb2312)AS gb2312, hex(gbk)AS gbk, hex(sjis)AS sjis, hex(ujis)AS ujis FROM tj; DROP TABLE tj; 结束// DELIMITER;
输入可以是任何单个
MySQL的>
由于没有列值
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.13。 |
为什么CJK字符串在Unicode中排序不正确? (一世) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
通过使用
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.14。 |
为什么CJK字符串在Unicode中排序不正确? (II) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
通过使用
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.15。 |
为什么我的补充字符被MySQL拒绝了? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
补充字符位于Unicode
基本多语言平面/平面0之外
。
BMP字符在
要存储增补字符,必须使用允许它们的字符集:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.16。 |
如果 “ CJK ” 是 “ CJKV ” ? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
不可以 。 “ CJKV ” ( 中文日文朝鲜语越南语 )是指包含汉(原中文)字符的越南字符集。 MySQL支持带有西方字符的现代越南语脚本,但不支持使用汉字符的旧越南语脚本。 从MySQL 5.6开始,有Unicode字符集的越南语排序规则,如 第10.10.1节“Unicode字符集”中所述 。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.17。 |
MySQL是否允许在数据库和表名中使用CJK字符? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
是。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.18。 |
我在哪里可以找到MySQL手册的中文,日文和韩文翻译? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
可以从 https://dev.mysql.com/doc/ 下载MySQL 5.6手册的日文翻译 。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A.11.19。 |
我在哪里可以获得有关CJK的帮助以及MySQL中的相关问题? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
以下资源可用:
|
在下一节中,我们提供了有关MySQL Replication最常被问及的问题的答案。
A.13.1。 |
从站必须始终连接到主站吗? |
不,不是的。 从站可以停机或保持断开连接数小时甚至数天,然后重新连接并赶上更新。 例如,您可以通过拨号链接建立主/从关系,其中链接仅偶尔以及短时间内启动。 这意味着,在任何给定时间,除非你采取一些特殊措施,否则不保证奴隶与主人同步。 要确保已断开连接的从站可能发生捕获,您不得从主服务器中删除包含尚未复制到从服务器的信息的二进制日志文件。 只有当从服务器能够从上次读取事件的点继续读取二进制日志时,异步复制才能工作。 |
|
A.13.2。 |
我必须在主设备和从设备上启用网络才能启用复制吗? |
是的,必须在主站和从站上启用网络。
如果未启用网络,则从站无法连接到主站并传输二进制日志。
检查是否
|
|
A.13.3。 |
我如何知道奴隶与主人相比有多晚? 换句话说,我怎么知道奴隶复制的最后一个语句的日期? |
检查
当从属SQL线程执行从主服务器读取的事件时,它会将自己的时间修改为事件时间戳。
(这就是
|
|
A.13.4。 |
如何强制主设备阻止更新,直到从设备赶上? |
使用以下过程:
|
|
A.13.5。 |
设置双向复制时,我应该注意哪些问题? |
MySQL复制当前不支持主服务器和从服务器之间的任何锁定协议,以保证分布式(跨服务器)更新的原子性。 换句话说,客户端A可以对共同主设备1进行更新,同时,在它传播到共同主设备2之前,客户端B可以对共同主设备2进行更新,以进行更新。客户端A的工作方式与在共同主服务器1上的工作方式不同。因此,当客户端A的更新使其成为共同主服务器2时,它会生成与您在共同主服务器1上的表不同的表,即使在所有更新之后也是如此来自联合大师2也有传播。 您还应该意识到,就更新而言,双向复制实际上并没有提高性能(如果有的话)。 每个服务器必须执行相同数量的更新,就像您使用单个服务器一样。 唯一的区别是锁争用少一点,因为源自另一台服务器的更新在一个从属线程中被序列化。 即使这种好处也可能被网络延迟所抵消。 |
|
A.13.6。 |
如何使用复制来提高系统性能? |
将一台服务器设置为主服务器并指示所有写入服务器。
然后配置与预算和机架空间一样多的从站,并在主站和从站之间分配读取。
您还可以使用
|
|
A.13.7。 |
如何在我自己的应用程序中准备客户端代码以使用性能增强复制? |
请参见使用复制作为横向扩展解决方案的指南, 第17.3.5节“使用复制进行 横向扩展 ” 。 |
|
A.13.8。 |
什么时候MySQL复制可以提高我的系统性能? |
MySQL复制对于处理频繁读取和不频繁写入的系统最有利。 理论上,通过使用单主/多从设置,您可以通过添加更多从设备来扩展系统,直到用完网络带宽,或者更新负载增长到主设备无法处理的程度。
要确定在增加的好处开始趋于平稳之前可以使用多少个从站,以及可以提高站点性能的程度,您必须知道查询模式,并通过对读取和写入的吞吐量之间的关系进行基准测试来确定。典型的主人和典型的奴隶。
此处的示例显示了对假设系统的复制可以获得的相当简化的计算。
让我们
假设系统负载由10%写入和90%读取组成,我们通过基准测试确定
9 *
最后一个等式表示
该分析得出以下结论:
这些计算假设无限的网络带宽,而忽略了可能对您的系统产生重大影响的其他几个因素。
在许多情况下,如果添加
|
|
A.13.9。 |
如何使用复制来提供冗余或高可用性? |
如何实现冗余完全取决于您的应用程序和环境。 高可用性解决方案(具有自动故障转移)需要主动监控以及自定义脚本或第三方工具,以提供从原始MySQL服务器到从属服务器的故障转移支持。 要手动处理该过程,您应该能够通过更改应用程序与新服务器通信或从故障服务器调整MySQL服务器的DNS到新服务器,从故障主服务器切换到预配置服务器。 有关更多信息和一些示例解决方案,请参见 第17.3.8节“在故障转移期间切换主站” 。 |
|
A.13.10。 |
如何判断主服务器是使用基于语句还是基于行的二进制日志记录格式? |
检查
MySQL的>
示出的值将是一
|
|
A.13.11。 |
如何告诉从属设备使用基于行的复制? |
Slaves自动知道要使用哪种格式。 |
|
A.13.12。 |
|
使用
|
|
A.13.13。 |
复制是否适用于混合操作系统(例如,主服务器在Linux上运行,而从服务器在OS X和Windows上运行)? |
是。 |
|
A.13.14。 |
复制是否适用于混合硬件体系结构(例如,主服务器在64位计算机上运行,而从服务器在32位计算机上运行)? |
是。 |
A.14.1。 |
什么是线程池,它解决了什么问题? |
MySQL线程池是一个MySQL服务器插件,它扩展了MySQL服务器的默认连接处理功能,以限制并发执行的语句/查询和事务的数量,以确保每个都有足够的CPU和内存资源来完成其任务。 对于MySQL 8.0,线程池插件包含在商业产品MySQL企业版中。 MySQL Server中的默认线程处理模型使用每个客户端连接一个线程执行语句。 随着越来越多的客户端连接到服务器并执行语句,整体性能会下降。 线程池插件提供了另一种线程处理模型,旨在减少开销并提高性能。 线程池插件通过有效管理大量客户端连接的语句执行线程来提高服务器性能,尤其是在现代多CPU /核心系统上。 有关更多信息,请参见 第5.6.3节“MySQL Enterprise线程池” 。 |
|
A.14.2。 |
线程池如何限制和管理并发会话和事务以获得最佳性能和吞吐量? |
线程池使用 “ 分而治之 ”的 方法来限制和平衡并发。 与MySQL服务器的默认连接处理不同,线程池将连接和线程分开,因此连接与执行从这些连接接收的语句的线程之间没有固定的关系。 然后,线程池管理可配置线程组内的客户端连接,根据提交的工作性质对它们进行优先级排序。 有关更多信息,请参见 第5.6.3.3节“线程池操作” 。 |
|
A.14.3。 |
线程池与客户端连接池有何不同? |
MySQL连接池在客户端运行,以确保MySQL客户端不会经常连接到MySQL服务器和从MySQL服务器断开连接。 它旨在缓存MySQL客户端中的空闲连接,以供其他用户在需要时使用。 当查询提交到MySQL服务器时,这最小化了建立和拆除连接的开销和费用。 MySQL连接池无法查看查询处理功能或后端MySQL服务器的负载。 相比之下,线程池在MySQL服务器端运行,旨在管理从访问后端MySQL数据库的客户端连接接收到的入站并发连接和查询的执行。 第28章, 连接器和API中 介绍了通过MySQL连接器进行的MySQL连接池 。 |
|
A.14.4。 |
我应该何时使用线程池? |
对于最佳线程池用例,需要考虑一些经验法则:
MySQL
如果您使用
最后,如果您的工作负载主要包含短查询,则线程池将是有益的。 要了解更多信息,请参见 第5.6.3.4节“线程池调整” 。 |
|
A.14.5。 |
是否有推荐的线程池配置? |
线程池有许多用户案例驱动的配置参数,这些参数会影响其性能。 要了解这些以及有关调优的提示,请参见 第5.6.3.4节“线程池调整” 。 |
A.15.1。 |
哪些类型的操作会修改二级索引并导致更改缓冲? |
|
|
A.15.2。 |
|
当辅助索引页不在缓冲池中时,缓冲辅助索引会发生变化,从而避免了从磁盘中立即读入受影响的索引页所需的昂贵的随机访问I / O操作。 缓存更改可以稍后批量应用,因为页面通过其他读取操作读入缓冲池。 |
|
A.15.3。 |
更改缓冲区是否支持其他类型的索引? |
不可以。更改缓冲区仅支持二级索引。 不支持聚簇索引,全文索引和空间索引。 全文索引有自己的缓存机制。 |
|
A.15.4。 |
|
在MySQL 5.6及更高版本中,
更改缓冲区页面不需要在缓冲池中持久存在,并且可能会被LRU操作逐出。 |
|
A.15.5。 |
如何确定更改缓冲区的当前大小? |
变更缓冲区的当前大小由
标题
------------------------------------- 插入缓冲区和自适应哈希索引 ------------------------------------- Ibuf:size 1,free list len 0,seg size 2,0合并 相关数据点包括:
有关监视更改缓冲区状态的信息,请参见 第15.5.2节“更改缓冲区” 。 |
|
A.15.6。 |
何时更改缓冲区合并? |
|
|
A.15.7。 |
刷新更换缓冲区的时间是什么时候? |
更新的页面由刷新占用缓冲池的其他页面的相同刷新机制刷新。 |
|
A.15.8。 |
应该何时使用更改缓冲区? |
更改缓冲区是一种功能,旨在随着索引变大并且不再适合
|
|
A.15.9。 |
应该何时不使用更改缓冲区? |
如果整个数据集适合
|
|
A.15.10。 |
在哪里可以找到有关更改缓冲区的其他信息? |
请参见 第15.5.2节“更改缓冲区” 。 |
A.16.1。 |
是否为有权查看的用户解密数据? |
是。
|
|
A.16.2。 |
与静态
|
没有额外的存储开销。 根据内部基准测试,性能开销达到一位数的百分比差异。 |
|
A.16.3。 |
用于静态
|
|
|
A.16.4。 |
是否可以使用第三方加密算法代替静态
|
不,不可能使用其他加密算法。 提供的加密算法被广泛接受。 |
|
A.16.5。 |
索引列可以加密吗? |
|
|
A.16.6。 |
静态数据
|
|
|
A.16.7。 |
数据是否在网络上保持加密状态? |
|
|
A.16.8。 |
数据库内存是否包含明文或加密数据? |
利用静态
|
|
A.16.9。 |
我如何知道要加密哪些数据? |
符合PCI-DSS标准要求以加密形式存储信用卡号(主帐号或“PAN”)。 违反通知法(例如,CA SB 1386,CA AB 1950以及美国43个以上州的类似法律)要求对名字,姓氏,驾驶执照号和其他PII数据进行加密。 2008年初,CA AB 1298向PII数据添加了医疗和健康保险信息。 此外,行业特定的隐私和安全标准可能要求加密某些资产。 例如,诸如药品研究结果,油田勘探结果,金融合同或执法信息提供者的个人数据等资产可能需要加密。 在医疗保健行业, |
|
A.16.10。 |
静态
|
MySQL中有对称和非对称加密API,可用于手动加密数据库中的数据。
但是,应用程序必须通过调用API函数来管理加密密钥并执行所需的加密和解密操作。
|
|
A.16.11。 |
可传输表空间功能是否可用于静态
|
是。 它支持加密的每个表文件表空间。 有关更多信息,请参阅 导出加密表空间 。 |
|
A.16.12。 |
压缩是否适用于静态
|
使用静态
|
|
A.16.13。 |
我可以使用
mysqlpump
或
|
是。 由于这些实用程序会创建逻辑备份,因此从加密表转储的数据不会加密。 |
|
A.16.14。 |
如何更改(旋转,重新键入)主加密密钥? |
|
|
A.16.15。 |
如何将数据从明文
|
不需要将数据从一个表空间传输到另一个表空间。
要加密
|
A.17.1。 |
MySQL VM,VMWare,Docker,Microsoft Hyper-V等虚拟化环境是否支持MySQL? |
MySQL在虚拟化环境中受支持,但仅针对 Oracle VM进行 认证 。 有关更多信息,请联系Oracle支持。 使用虚拟化软件时要注意潜在的问题。 通常情况与磁盘,I / O,网络和内存的性能,性能下降,缓慢或不可预测性有关。 |