• 关于 C#的隐式和显式转换 的搜索结果

问题

MaxCompute用户指南:SQL:类型转换

行者武松 2019-12-01 22:02:12 1478 浏览量 回答数 0

回答

ES6 允许从符号到字符串的显式强制类型转换,然而隐式强制类型转换会产生错误。 Symbol 值不能够被强制类型转换为数字(显式和隐式都会产生错误),但可以被强制类型转换为布尔值(显式和隐式结果 都是 true )。

剑曼红尘 2020-04-02 13:43:46 0 浏览量 回答数 0

回答

隐式转换 范围小的类型可以自动转换为范围大的类型,大范围类型能容纳小范围类型(也称显示转换为扩展转换)这些转换都是兼容的。 显式转换 大的范围转换为小范围类型,会造成信息丢失(也称隐式转换为窄化转换),不兼容性转换。如图,利用类型转换操作符(cast)进行显示转换。 浮点数转换为整数的小数问题 float和double类型转换为整数时,总是舍去小数点后面的部分,称此行为为截尾。 如果对小数点后面的部分进行四舍五入,即舍入操作,需要利用java.lang.Math中的round()方法

问问小秘 2020-03-30 14:14:46 0 浏览量 回答数 0

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

回答

了解数据库的事务(自动提交,显式和隐式)处理可以使您不必从备份中还原数据。 事务控制数据操作语句以确保它们是原子的。“原子性”表示交易已发生或未发生。向数据库发出事务完成信号的唯一方法是使用COMMITor ROLLBACK语句(根据ANSI-92,遗憾的是它不包含用于创建/开始事务的语法,因此它是特定于供应商的)。 COMMIT应用在交易中进行的更改(如果有)。ROLLBACK忽略事务中发生的任何动作-当UPDATE / DELETE语句做意外的事情时,这是非常理想的。 通常,单个DML(插入,更新,删除)语句在自动提交事务中执行-语句成功完成后便会提交它们。这意味着在像您这样的情况下,没有机会将数据库回滚到语句运行之前的状态。当出现问题时,唯一可用的还原选项是从备份中重建数据(假设存在备份)。在MySQL中,默认情况下,InnoDB的自动提交功能处于启用状态 -MyISAM不支持事务。可以使用以下命令禁用它: SET autocommit = 0 显式事务是指将语句包装在显式定义的事务代码块中- 对于MySQL,即START TRANSACTION。它还需要在交易结束时明确做出COMMIT或ROLLBACK声明。嵌套事务不在本主题的范围之内。 隐式交易与显式交易略有不同。隐式事务不需要显式定义事务。但是,像显式事务一样,它们需要提供COMMITor ROLLBACK语句。 结论 显式事务是最理想的解决方案-它们要求使用语句COMMIT或ROLLBACK来完成事务,并且明确说明正在发生的事情,以便其他人在需要时阅读。如果以交互方式使用数据库,则隐式事务是可以的,但是COMMIT只有在对结果进行了测试并确定其有效之后,才应指定语句。 这意味着您应该使用: SET autocommit = 0; START TRANSACTION; UPDATE ...; ...并且仅COMMIT;在结果正确时使用。 也就是说,UPDATE和DELETE语句通常仅返回受影响的行数,而不返回特定的详细信息。将此类语句转换为SELECT语句,并在尝试UPDATE / DELETE语句之前检查结果以确保正确性。 附录 DDL(数据定义语言)语句是自动提交的-它们不需要COMMIT语句。IE:表,索引,存储过程,数据库和视图创建或更改语句。来源:stack overflow

保持可爱mmm 2020-05-17 21:01:37 0 浏览量 回答数 0

回答

规范的 9.8 节中定义了抽象操作 ToString ,它负责处理非字符串到字符串的强制类型转换。 (1)Null 和 Undefined 类型 ,null 转换为 "null",undefined 转换为 "undefined", (2)Boolean 类型,true 转换为 "true",false 转换为 "false"。 (3)Number 类型的值直接转换,不过那些极小和极大的数字会使用指数形式。 (4)Symbol 类型的值直接转换,但是只允许显式强制类型转换,使用隐式强制类型转换会产生错误。 (3)对普通对象来说,除非自行定义 toString() 方法,否则会调用 toString()(Object.prototype.toString()) 来返回内部属性 [[Class]] 的值,如"[object Object]"。如果对象有自己的 toString() 方法,字符串化时就会 调用该方法并使用其返回值。

剑曼红尘 2020-04-02 13:39:09 0 浏览量 回答数 0

回答

Java基本类型及其包装有哪些? Java基本类型-整数类型byte、short、int和long byte:字节型;short:短整型;int:整型;long:长整型。 刚开始学习时有种疑惑,为啥弄这么多整数类型? 从字节型到长整型,整数的范围总是在不断增加,不够用了自然就要扩展范围,添加新的类型;若范围小的整数浪费空间太多,又会影响程序,所以在使用时就有了类型供我们选择。 Java基本类型-- 浮点型float和double https://developer.aliyun.com/ask/280806 Java基本类型-字符型char Java采用的是Unicode编码格式,字符类型的变量不仅可以接收单字符常量,还可以接收0~65535之间的整数。 转义字符表(有些特殊含义的字符需要通过\来协助) Java基本类型-布尔型boolean Java中的布尔型只表示字面true和false,不同C++之处,如果将一个整数值赋值给布尔类型变量,编译器将报错。 Java基本类型- Java常量默认类型有哪些? 在Java中整型常量默认int类型,如果想要使用long类型常量,需要在常量后添加L/l字符,例如:15L 浮点数默认为double类型,如果想要float类型需要添加F/f,例如:3.14F Java基本类型-- 基本类型的范围包括哪些? 我们可以利用基本类型的包装类中的关键字MAX_VALUE和MIN_VALUE,打印出基本类型的范围。 public class PrintRange { public static void main(String[] args) { System.out.println("byte: "+Byte.MIN_VALUE+" ~ "+Byte.MAX_VALUE); System.out.println("short: "+Short.MIN_VALUE+" ~ "+Short.MAX_VALUE); System.out.println("int: "+Integer.MIN_VALUE+" ~ "+Integer.MAX_VALUE); System.out.println("long: "+Long.MIN_VALUE+" ~ "+Long.MAX_VALUE); System.out.println("float: "+Float.MIN_VALUE+" ~ "+Float.MAX_VALUE); System.out.println("double: "+Double.9+" ~ "+Double.MAX_VALUE); System.out.println("char: "+Character.MIN_VALUE+" ~ "+Character.MAX_VALUE); } } Java基本类型-基本类型间的相互转换- 隐式转换、显式转化 隐式转换 范围小的类型可以自动转换为范围大的类型,大范围类型能容纳小范围类型(也称显示转换为扩展转换)这些转换都是兼容的。 显式转换 大的范围转换为小范围类型,会造成信息丢失(也称隐式转换为窄化转换),不兼容性转换。如图,利用类型转换操作符(cast)进行显示转换。 浮点数转换为整数的小数问题 float和double类型转换为整数时,总是舍去小数点后面的部分,称此行为为截尾。 如果对小数点后面的部分进行四舍五入,即舍入操作,需要利用java.lang.Math中的round()方法 Java基本类型-基本类型和包装类之间的转换- 自动装箱和拆箱 Java5出现的特性,基本类型和封装类之间可以进行自动拆箱和装箱进行类型转换(由基类转换为包装类)。 ** 包装类中还包含很多将包装类装换为其他基类的接口,详细的可以查看Java API文档** java基本类型-- 基本类型和String类型之间的转换 在我们进行Java GUI界面开发时,通常会获取文本输入框的值,这就可能涉及到String类型转换为基本类型的问题。 public class PrintRange { public static void main(String[] args) { //基类转换为String类型 int a = 125; String s = String.valueOf(a); //String类型转换为基类 a = Integer.parseInt(s); } } String转换为基类利用的是基类对应包装类的parse···方法,基类转换字符串用的是String类中的valueOf方法,这些在Java API中都有介绍。 Java基本类型作为方法参数传递中的转换

问问小秘 2020-03-30 14:41:23 0 浏览量 回答数 0

问题

转换函数是什么?

nicenelly 2019-12-01 21:26:35 1259 浏览量 回答数 0

回答

类型转换的规则有哪些? 在if语句、逻辑语句、数学运算逻辑、==等情况下都可能出现隐⼠类型转换。 类型转换的原理是什么? 类型转换指的是将⼀种类型转换为另⼀种类型,例如: var b = 2; var a = String(b); console.log(typeof a); //string 当然,类型转换分为显式和隐式,但是不管是隐式转换还是显式转换,都会遵循⼀定的原理,由于JavaScript是⼀⻔动态类型的语⾔,可以随时赋予任意值,但是各种运算符或条件判断中是需要特定类型的,因此JavaScript引擎会在运算时为变量设定类型. 这看起来很美好,JavaScript引擎帮我们搞定了 类型 的问题,但是引擎毕竟不是ASI(超级⼈⼯智能),它的很多动作会跟我们预期相去甚远,我们可以从⼀到⾯试题开始. {}+[] //0 答案是0 是什么原因造成了上述结果呢?那么我们得从ECMA-262中提到的转换规则和抽象操作说起,有兴趣的童鞋可以仔细阅读下这浩如烟海的语⾔规范,如果没这个耐⼼还是往下看. 这是JavaScript种类型转换可以从原始类型转为引⽤类型,同样可以将引⽤类型转为原始类型,转为原始类型的抽象操作为 ToPrimitive ,⽽后续更加细分的操作为: ToNumber ToString ToBoolean 。 为了更深⼊的探究JavaScript引擎是如何处理代码中类型转换问题的,就需要看 ECMA-262详细的规范,从⽽探究其内部原理,我们从这段内部原理示意代码开始. // ECMA-262, section 9.1, page 30. Use null/undefined for no hint, // (1) for number hint, and (2) for string hint. function ToPrimitive(x, hint) { // Fast case check. if (IS_STRING(x)) return x; // Normal behavior. if (!IS_SPEC_OBJECT(x)) return x; if (IS_SYMBOL_WRAPPER(x)) throw MakeTypeError(kSymbolToPrimitive); if (hint == NO_HINT) hint = (IS_DATE(x)) ? STRING_HINT : NUMBER_HINT; return (hint == NUMBER_HINT) ? DefaultNumber(x) : DefaultString(x); } // ECMA-262, section 8.6.2.6, page 28. function DefaultNumber(x) { if (!IS_SYMBOL_WRAPPER(x)) { var valueOf = x.valueOf; if (IS_SPEC_FUNCTION(valueOf)) { var v = %_CallFunction(x, valueOf); if (IsPrimitive(v)) return v; } var toString = x.toString; if (IS_SPEC_FUNCTION(toString)) { var s = %_CallFunction(x, toString); if (IsPrimitive(s)) return s; } } throw MakeTypeError(kCannotConvertToPrimitive); } // ECMA-262, section 8.6.2.6, page 28. function DefaultString(x) { if (!IS_SYMBOL_WRAPPER(x)) { var toString = x.toString; if (IS_SPEC_FUNCTION(toString)) { var s = %_CallFunction(x, toString); if (IsPrimitive(s)) return s; } var valueOf = x.valueOf; if (IS_SPEC_FUNCTION(valueOf)) { var v = %_CallFunction(x, valueOf); if (IsPrimitive(v)) return v; } } throw MakeTypeError(kCannotConvertToPrimitive); } 上⾯代码的逻辑是这样的: 如果变量为字符串,直接返回.如果 !IS_SPEC_OBJECT(x) ,直接返回.如果 IS_SYMBOL_WRAPPER(x) ,则抛出异常.否则会根据传⼊的 hint 来调⽤ DefaultNumber 和 DefaultString ,⽐如如果为 Date 对象,会调DefaultString .DefaultNumber :⾸ 先x.valueOf ,如果为 primitive ,则返回 valueOf 后的值,否则继续调⽤ x.toString,如果为 primitive ,则返回 toString 后的值,否则抛出异常DefaultString :和 DefaultNumber 正好相反,先调⽤ toString ,如果不是 primitive 再调⽤ valueOf . 那讲了实现原理,这个 ToPrimitive 有什么⽤呢?实际很多操作会调⽤ ToPrimitive ,⽐如加、相等或⽐较操。在进⾏加操作时会将左右操作数转换为 primitive ,然后进⾏相加。 下⾯来个实例,({}) + 1(将{}放在括号中是为了内核将其认为⼀个代码块)会输出啥?可能⽇常写代码并不会这样写,不过⽹上出过类似的⾯试题。 加操作只有左右运算符同时为 String或Number 时会执⾏对应的 %_StringAdd或%NumberAdd ,下⾯看下 ({}) + 1 内部会经过哪些步骤: {} 和 1 ⾸先会调⽤ToPrimitive {} 会⾛到 DefaultNumber ,⾸先会调⽤ valueOf ,返回的是 Object {} ,不是primitive类型,从⽽继续⾛到 toString ,返回 [object Object] ,是 String 类型 最后加操作,结果为 [object Object]1 再⽐如有⼈问你 [] + 1 输出啥时,你可能知道应该怎么去计算了,先对 [] 调⽤ ToPrimitive ,返回空字符串,最后结果为"1"。

前端问答 2019-12-19 07:36:28 0 浏览量 回答数 0

回答

编译的版本使用数组初始化程序进行初始化list1。C#语言规范§1.110(“数组初始化器”)规定: 数组初始化程序由一系列变量初始化程序组成,这些变量初始化程序由“ {”和“}”标记包围,并由“,”标记分隔。每个变量初始化器都是一个表达式,对于多维数组,则是一个嵌套数组初始化器。 使用数组初始化程序的上下文确定要初始化的数组的类型。在数组创建表达式中,数组类型紧接在初始化器之前,或者从数组初始化器中的表达式推断出来。在字段或变量声明中,数组类型是要声明的字段或变量的类型。 在字段或变量声明中使用数组初始化程序时,例如: int[] a = {0, 2, 4, 6, 8}; 它只是等效数组创建表达式的简写形式: int[] a = new int[] {0, 2, 4, 6, 8}; 因此很明显,应该编译。 第二个版本使用显式的数组创建表达式,您可以在其中明确指示编译器创建哪种类型的数组。§1.51.10.4(“数组创建表达式”)规定: 第三种形式的数组创建表达式称为 隐式类型的数组创建表达式。它与第二种形式相似,不同之处在于未明确给出数组的元素类型,而是将其确定为数组初始值设定项中表达式集的最佳通用类型(第1.50.2.14节)。 因此,第二个版本相当于 object[] list2 = new int[] { 0, 1 }; 因此,问题实际上变成了“为什么我不能分配int[]一个object[]”,就像您在问题末尾提到的那样。答案也很简单,如第1.109节(“数组协方差”)所示: 数组协方差尤其不扩展到值类型数组。例如,不存在允许将an int[] 视为的转换object[]。

保持可爱mmm 2020-02-08 22:08:13 0 浏览量 回答数 0

问题

OceanBase支持的转换函数

云栖大讲堂 2019-12-01 21:28:39 1049 浏览量 回答数 0

回答

基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外。它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下。 toString() toString()函数的作用是返回object的字符串表示,JavaScript中object默认的toString()方法返回字符串”[object Object]“。定义类时可以实现新的toString()方法,从而返回更加具有可读性的结果。JavaScript对于数组对象、函数对象、正则表达式对象以及Date日期对象均定义了更加具有可读性的toString()方法: 1.array的toString()方法将返回以逗号分隔的数组成员。比如,[1,2,3].toString()会返回字符串”1,2,3″。 2.function的toString()方法将返回函数的文本定义。比如,(function(x){return x2;}).toString()会返回字符串”function(x){return x2;}”。 3.RegExp的toString()方法与function的toString()方法类似,将返回正则表达式的文本定义。比如,/\d+/g.toString()会返回字符串”/\d+/g”。 4.Date的toString()方法将返回一个具有可读性的日期时间字符串。 5.如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。 valueOf() valueOf()函数的作用是返回该object自身。与toString()一样,定义类时可以实现新的valueOf()方法,从而返回需要的结果。JavaScript对于Date对象定义了更加具有可读性的valueOf()方法: 1.Date的valueOf()方法将返回一个时间戳数值,该数值为Date对象与1970年1月1日零时的时间差(以毫秒为单位)。其他一律返回对象本身。 在js高程里面有一段代码: 1 2 3 4 var colors = ["red", "blue", "green"]; // 创建一个包含3 个字符串的数组 alert(colors.toString()); // red,blue,green alert(colors.valueOf()); // red,blue,green alert(colors); // red,blue,green 三个输出全部一样,那么toString()和valueOf()区别到底是什么?看下一个我写的例子: 1 2 3 var arr = [1,2,3]; alert(Array.isArray(arr.valueOf())); alert(Array.isArray(arr.toString())); 结果是第一个是true而第二个是false,为什么呢,其实valueOf()调用完以后还是返回一个数组。这个数组被alert的时候会调用toString()函数,所以不是valueOf()和toString()函数相同,而是间接的调用了toString()函数! 进一步测试下: 1 2 3 4 5 var arr = [1,2,3]; arr.toString = function () { alert("你调用了toString函数"); } alert(arr.valueOf()); 结果就是我们会看到“你调用了toString函数”。 而对于数值,我们可以调用valueOf的时候直接可以获得数字进行计算,不必转化成字符串,所以不会调用toString。反言之,如果我们需要获得操作对象的字符串形式的时候就会调用其toString函数。 验证如下代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var bbb = { i: 10, toString: function() { console.log('toString'); return this.i; }, valueOf: function() { console.log('valueOf'); return this.i; } } alert(bbb);// 10 toString alert(+bbb); // 10 valueOf alert(''+bbb); // 10 valueOf alert(String(bbb)); // 10 toString alert(Number(bbb)); // 10 valueOf alert(bbb == '10'); // true valueOf alert(bbb === '10'); // false 我的理解:valueOf的意思是返回最适合该对象类型的原始值,而toString则是将在该对象类型的原始值以字符串形式返回。 第一个 1 alert(bbb);// 10 toString 这里我们的alert函数需要是的字符串,所以获取的是字符串,而不是原始值,故而调用了toString 第二个 1 alert(+bbb); // 10 valueOf 同理,alert要的是字符串不是原始值,其实是+bbb这个东西被调用了toString,而bbb被调用了valueOf 为了验证我们这样写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var a = { i: 1, valueOf: function () { alert("你调用了a的valueOf函数"); return this.i; }, toString: function () { alert("你调用了a的toString函数"); return this.i; } }; var c = { i: +a, valueOf: function () { alert("你调用了c的valueOf函数"); return this.i; }, toString: function () { alert("你调用了c的toString函数"); return this.i; } }; alert(c); 其中让c=+a,那么即可知道结果,果然如此,调用了a的valueOf和c的toString 第三个 1 alert(''+bbb); // 10 valueOf 同理,我们可以把上一段我写的程序里面的c:+a改成c:''+a 第四个 1 alert(String(bbb)); // 10 toString String这个强制转换其实在其内部是调用了传入参数的toString函数…… 第五个 1 alert(Number(bbb)); // 10 valueOf 这个是有区别的,因为bbb的i属性是数值类型的,如果i为11111xxxxx这样的字符串,我们就可以看到调用了bbb的toString了 代码例子: 1 2 3 4 5 6 7 8 9 10 11 12 var c = { i: "11111xxxx", valueOf: function () { alert("你调用了c的valueOf函数"); return this.i; }, toString: function () { alert("你调用了c的toString函数"); return this.i; } }; alert(c); 第六个 1 alert(bbb == '10'); // true valueOf 这个里面的判等的顺序是,获取原始值,然后判断两边的原始值是否相等,所以调用valueOf 第七个也就是最后一个 1 alert(bbb === '10'); // false ===操作符不进行隐式转换,判全等的第一个步骤是判断类型,因为类型都不一样了,所以后面什么都不会调用 总结:valueOf偏向于运算,toString偏向于显示。 1、 在进行强转字符串类型时将优先调用toString方法,强转为数字时优先调用valueOf。 2、 在有运算操作符的情况下,valueOf的优先级高于toString。 下面给大家简单说下valueof和tostring的区别。 valueOf():返回最适合该对象类型的原始值; toString(): 将该对象的原始值以字符串形式返回。 这两个方法一般是交由JS去隐式调用,以满足不同的运算情况。 在数值运算里,会优先调用valueOf(),如a + b; 在字符串运算里,会优先调用toString(),如alert(c)。

景凌凯 2020-04-03 22:24:31 0 浏览量 回答数 0

回答

数据存储: utf8mb4在数据库的所有表和文本列上指定字符集。这使得MySQL在物理上存储和检索以UTF-8本地编码的值。注意,utf8mb4如果utf8mb4_*指定了排序规则(没有任何显式字符集),MySQL将隐式使用编码。 在旧版本的MySQL(<5.5.3)中,不幸的是,您将被迫utf8仅使用,仅支持Unicode字符的一部分。我希望我在开玩笑。 资料存取: 在您的应用程序代码(例如PHP)中,无论使用哪种数据库访问方法,都需要将连接字符集设置为utf8mb4。这样,当MySQL将数据交给您的应用程序时,MySQL不会从其本地UTF-8进行转换,反之亦然。 一些驱动程序提供了自己的配置连接字符集的机制,该机制既可以更新其自身的内部状态,又可以将要在连接上使用的编码通知MySQL-这通常是首选方法。在PHP中: 如果您使用PHP≥5.3.6的PDO抽象层,则可以charset在DSN中指定: $dbh = new PDO('mysql:charset=utf8mb4'); 如果您使用的是mysqli,则可以调用set_charset(): $mysqli->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($link, 'utf8mb4'); // procedural style 如果您坚持使用普通的mysql,但碰巧正在运行PHP≥5.2.3,则可以致电mysql_set_charset。 如果驱动程序不提供自己的设置连接字符集的机制,则可能必须发出查询以告知MySQL您的应用程序期望连接上的数据如何被编码:SET NAMES 'utf8mb4'。 关于utf8mb4/ utf8适用与上述相同的考虑。 输出: 如果您的应用程序将文本传输到其他系统,则还需要告知他们字符编码。对于Web应用程序,必须告知浏览器发送数据的编码(通过HTTP响应标头或HTML元数据)。 在PHP中,您可以使用default_charsetphp.ini选项,或Content-Type自己手动发出MIME标头,这虽然工作更多,但效果相同。 使用编码输出时json_encode(),请添加JSON_UNESCAPED_UNICODE作为第二个参数。 输入: 不幸的是,在尝试存储或在任何地方使用它之前,您应该验证每个收到的字符串都是有效的UTF-8。PHP mb_check_encoding()可以解决问题,但您必须谨慎使用。真的没有办法解决这个问题,因为恶意客户端可以使用他们想要的任何编码来提交数据,而且我还没有找到使PHP可靠地为您执行此操作的技巧。 从我对当前HTML规范的阅读中,对于现代HTML,以下子项目不再是必需的,甚至不再有效。我的理解是浏览器将使用为文档指定的字符集并提交数据。但是,如果您定位的是旧版HTML(XHTML,HTML4等),则以下几点可能仍然有用: 仅适用于HTML5之前的HTML:您希望浏览器发送给您的所有数据都使用UTF-8。不幸的是,如果您唯一可靠的方法是将该accept-charset属性添加到所有 代码中:<form ... accept-charset="UTF-8">。 仅对于HTML5之前的HTML:请注意,W3C HTML规范指出,客户端“应”默认使用服务器提供的任何字符集将表单发送回服务器,但这显然仅是建议,因此需要在每一个服务器上都明确标签。 其他代码注意事项: 显然,您将要提供的所有文件(PHP,HTML,JavaScript等)都应使用有效的UTF-8进行编码。 您需要确保每次处理UTF-8字符串时,都必须安全进行。不幸的是,这是最困难的部分。您可能需要大量使用PHP的mbstring扩展。 PHP的内置字符串操作默认情况下不是 UTF-8安全的。 您可以使用正常的PHP字符串操作(例如串联)安全地进行某些操作,但是对于大多数事情,您应该使用等效的mbstring功能。 要知道您在做什么(请阅读:不要搞砸),您确实需要了解UTF-8及其在最低级别上的工作方式。查看utf8.com上的任何链接,以获取一些好的资源,以学习您需要了解的所有内容。

保持可爱mmm 2020-05-08 09:43:44 0 浏览量 回答数 0

问题

使用阿里云服务器进行开发的小结

gameover 2019-12-01 21:06:23 15827 浏览量 回答数 23

回答

JavaScript具有强大的语义,可以遍历数组和类似数组的对象。我将答案分为两部分:真正数组的选项,以及仅是数组之类的东西的选项,例如arguments对象,其他可迭代对象(ES2015 +),DOM集合,等等。 我会很快注意到,您现在可以通过将ES2015转换为ES5 ,甚至在ES5引擎上使用ES2015选项。搜索“ ES2015 transpiling” /“ ES6 transpiling”以了解更多... 好吧,让我们看看我们的选择: 对于实际数组 您目前在ECMAScript 5(“ ES5”)中拥有三个选项,这是目前最广泛支持的版本,在ECMAScript 2015中又添加了两个选项(“ ES2015”,“ ES6”): 使用forEach及相关(ES5 +) 使用一个简单的for循环 正确使用for-in 使用for-of(隐式使用迭代器)(ES2015 +) 明确使用迭代器(ES2015 +) 细节: 1.使用forEach及相关 在任何可以访问ArrayES5(直接或使用polyfills)添加的功能的模糊现代环境(因此,不是IE8)中,都可以使用forEach(spec| MDN): var a = ["a", "b", "c"]; a.forEach(function(entry) { console.log(entry); }); forEach接受回调函数,以及(可选)this调用该回调时要使用的值(上面未使用)。依次为数组中的每个条目调用回调,从而跳过稀疏数组中不存在的条目。尽管上面只使用了一个参数,但回调函数使用以下三个参数调用:每个条目的值,该条目的索引以及对要迭代的数组的引用(以防您的函数尚未使用它) )。 除非您支持IE8之类的过时浏览器(截至2016年9月,NetApps在该市场上所占份额刚刚超过4%),forEach否则您可以在没有垫片的情况下在通用网页中愉快地使用。如果您确实需要支持过时的浏览器,forEach则可以轻松进行填充/填充(搜索“ es5 shim”以获得多个选项)。 forEach 这样做的好处是您不必在包含范围中声明索引和值变量,因为它们是作为迭代函数的参数提供的,因此可以很好地将作用域限定为该迭代。 如果您担心为每个数组条目进行函数调用的运行时成本,请不必担心;细节。 此外,forEach它是“遍历所有对象”功能,但是ES5定义了其他几个有用的“遍历数组并做事”功能,包括: every(在第一次返回回调false或出现错误时停止循环) some(在第一次返回回调true或发生错误时停止循环) filter(创建一个新数组,其中包含过滤器函数返回的元素,true并省略其返回的元素false) map (根据回调返回的值创建一个新数组) reduce (通过重复调用回调并传入先前的值来建立值;有关详细信息,请参见规范;对汇总数组内容和许多其他内容很有用) reduceRight(如reduce,但按降序而不是升序工作) 2.使用一个简单的for循环 有时,旧方法是最好的: var index; var a = ["a", "b", "c"]; for (index = 0; index < a.length; ++index) { console.log(a[index]); } 如果数组的长度将不会在循环过程中改变,它在性能敏感的代码(不可能),一个稍微复杂一点的版本抓住了长度达阵可能是一个很小的有点快: var index, len; var a = ["a", "b", "c"]; for (index = 0, len = a.length; index < len; ++index) { console.log(a[index]); } 和/或倒数: var index; var a = ["a", "b", "c"]; for (index = a.length - 1; index >= 0; --index) { console.log(a[index]); } 但是,使用现代JavaScript引擎,很少需要消耗掉最后的能量。 在ES2015及更高版本中,可以使索引和值变量在for循环本地: let a = ["a", "b", "c"]; for (let index = 0; index < a.length; ++index) { let value = a[index]; console.log(index, value); } //console.log(index); // would cause "ReferenceError: index is not defined" //console.log(value); // would cause "ReferenceError: value is not defined" 而且,当您执行此操作时,不仅会为每个循环迭代创建一个新的闭包,value而且还会index为每个循环迭代重新创建一个闭包,这意味着在循环主体中创建的闭包保留对为该特定迭代创建的index(和value)的引用: let divs = document.querySelectorAll("div"); for (let index = 0; index < divs.length; ++index) { divs[index].addEventListener('click', e => { console.log("Index is: " + index); }); } 如果您有五个div,则单击第一个将获得“索引为:0”,如果单击最后一个则将为“索引为:4”。如果您使用而不是则无法使用。varlet 3. 正确使用for-in 你会得到别人告诉你使用for-in,但是这不是for-in对。for-in遍历对象的可枚举属性,而不是数组的索引。甚至在ES2015(ES6)中也不保证顺序。ES2015 +不定义为对象属性(通过[[OwnPropertyKeys]],[[Enumerate]]以及使用他们喜欢的东西Object.getOwnPropertyKeys),但它并没有定义for-in将遵循这个顺序。(其他答案的详细信息。) for-in数组上唯一真正的用例是: 这是一个稀疏的数组,里面有巨大的空隙,或者 您正在使用非元素属性,并且希望将它们包括在循环中 仅查看第一个示例:for-in如果使用适当的保护措施,则可以用来访问那些备用阵列元素: // a is a sparse array var key; var a = []; a[0] = "a"; a[10] = "b"; a[10000] = "c"; for (key in a) { if (a.hasOwnProperty(key) && // These checks are /^0$|^[1-9]\d*$/.test(key) && // explained key <= 4294967294 // below ) { console.log(a[key]); } } 请注意以下三个检查: 该对象具有该名称的自身属性(不是从其原型继承的属性),并且 该键是所有十进制数字(例如,正常的字符串形式,而不是科学计数法),并且 该键的值在被强制为数字时为<= 2 ^ 32-2(即4,294,967,294)。这个数字从哪里来?它是规范中数组索引定义的一部分。其他数字(非整数,负数,大于2 ^ 32-2的数字)不是数组索引。它的2 ^ 32的理由- 2是使得大于2 ^ 32下一个最大的索引值- 1,这是一个数组的最大值length可以有。(例如,数组的长度适合于32位无符号整数。)(向RobG表示支持,在我的博客文章的评论中指出我先前的测试不太正确。) 当然,您不会在内联代码中执行此操作。您将编写一个实用程序函数。也许: 4.使用for-of(隐式使用迭代器)(ES2015 +) ES2015将迭代器添加到JavaScript。使用迭代器最简单的方法是new for-of语句。看起来像这样: const a = ["a", "b", "c"]; for (const val of a) { console.log(val); } 在幕后,它从数组中获取一个迭代器并循环遍历,从而从中获取值。这没有使用for-inhas 的问题,因为它使用了由对象(数组)定义的迭代器,并且数组定义了其迭代器遍历其条目(而不是其属性)。与for-inES5 不同,访问条目的顺序是其索引的数字顺序。 5.明确使用迭代器(ES2015 +) 有时,您可能想显式使用迭代器。您也可以这样做,尽管它比笨拙得多for-of。看起来像这样: const a = ["a", "b", "c"]; const it = a.values(); let entry; while (!(entry = it.next()).done) { console.log(entry.value); } 迭代器是与规范中的迭代器定义匹配的对象。每次调用时,其next方法都会返回一个新的结果对象。结果对象具有属性,done告诉我们是否完成操作,以及一个value具有该迭代值的属性。(done如果是false,value则为可选,如果是,则为可选undefined。) 的含义value取决于迭代器;数组至少支持三个返回迭代器的函数: values():这是我上面使用的那个。它返回迭代,其中每个value是用于该迭代阵列条目("a","b",和"c"在实施例更早)。 keys():返回一个迭代器,每个迭代器value都是该迭代的关键(因此,对于我们a上面的代码,将是"0",然后是"1",然后是"2")。 entries():返回一个迭代器,其中每个迭代器value都是[key, value]该迭代形式的数组。 对于类似数组的对象 除了真正的数组之外,还有一些类数组对象,它们具有一个length或多个具有数字名称的属性:NodeList实例,arguments对象等。我们如何遍历它们的内容? 对数组使用上面的任何选项 上面的至少一些(可能是大多数甚至全部)数组方法经常同样适用于类似数组的对象: 使用forEach及相关(ES5 +) 上的各种功能Array.prototype是“有意通用的”,通常可以通过Function#call或在类似数组的对象上使用Function#apply。(在此答案的末尾,请参阅警告,以了解主机提供的对象,但这是一个罕见的问题。) 假设您要forEach在Node的childNodes属性上使用。您可以这样做: Array.prototype.forEach.call(node.childNodes, function(child) { // Do something with `child` }); 如果要执行很多操作,则可能需要将函数引用的副本复制到变量中以供重用,例如: // (This is all presumably in some scoping function) var forEach = Array.prototype.forEach; // Then later... forEach.call(node.childNodes, function(child) { // Do something with `child` }); 使用一个简单的for循环 显然,一个简单的for循环适用于类似数组的对象。 正确使用for-in for-in具有与数组相同的保护措施,也应与类似数组的对象一起使用;上面#1中由主机提供的对象的警告可能适用。 使用for-of(隐式使用迭代器)(ES2015 +) for-of将使用对象提供的迭代器(如果有);我们将不得不看一下它如何与各种类似数组的对象一起运行,尤其是主机提供的对象。例如,NodeListfrom 的规范querySelectorAll已更新以支持迭代。HTMLCollectionfrom 的规格getElementsByTagName不是。 明确使用迭代器(ES2015 +) 参见#4,我们必须看看迭代器如何发挥作用。 创建一个真实的数组 其他时候,您可能希望将类似数组的对象转换为真正的数组。做到这一点非常容易: 使用slice数组的方法 我们可以使用slice数组的方法,就像上面提到的其他方法一样,它是“故意通用的”,因此可以与类似数组的对象一起使用,如下所示: var trueArray = Array.prototype.slice.call(arrayLikeObject); 因此,例如,如果我们要将a NodeList转换为真实数组,则可以执行以下操作: var divs = Array.prototype.slice.call(document.querySelectorAll("div")); 请参阅下面的警告,了解主机提供的对象。特别要注意的是,这将在IE8及更早版本中失败,这不允许您this像这样使用主机提供的对象。 使用传播语法(...) 还可以将ES2015的扩展语法与支持此功能的JavaScript引擎一起使用: var trueArray = [...iterableObject]; 因此,例如,如果我们想将a NodeList转换为真正的数组,使用扩展语法,这将变得非常简洁: var divs = [...document.querySelectorAll("div")]; 使用Array.from (规格) | (MDN) Array.from(ES2015 +,但很容易填充),从类似数组的对象创建数组,可以选择先将条目通过映射函数传递。所以: var divs = Array.from(document.querySelectorAll("div")); 或者,如果您想获取具有给定类的元素的标记名称的数组,则可以使用映射函数: // Arrow function (ES2015): var divs = Array.from(document.querySelectorAll(".some-class"), element => element.tagName); // Standard function (since `Array.from` can be shimmed): var divs = Array.from(document.querySelectorAll(".some-class"), function(element) { return element.tagName; }); 警告主机提供的对象 如果您将Array.prototype函数与主机提供的类似数组的对象一起使用(DOM列表和浏览器而非JavaScript引擎提供的其他内容),则需要确保在目标环境中进行测试,以确保主机提供的对象行为正常。大多数(现在)确实表现正常,但是测试很重要。原因是Array.prototype您可能要使用的大多数方法都依赖于主机提供的对象,该对象为抽象[[HasProperty]]操作提供了诚实的答案。在撰写本文时,浏览器在这方面做得很好,但是5.1规范确实允许由主机提供的对象可能不诚实。在§8.6.2中,该部分开头附近的大表下方的几段中),其中表示: 除非另有说明,否则宿主对象可以以任何方式实现这些内部方法。例如,一种可能性是,[[Get]]和[[Put]]对特定宿主对象确实读取与存储的属性值但[[HasProperty]]总是产生假。 (我在ES2015规范中找不到等效的用法,但情况肯定仍然如此。)同样,在撰写本文时,现代浏览器中的主机提供的类似数组的对象(NodeList例如,实例)确实可以处理[[HasProperty]]正确,但是测试很重要。) 问题来源于stack overflow

保持可爱mmm 2020-01-08 11:20:24 0 浏览量 回答数 0

问题

OceanBase支持的字符串函数

云栖大讲堂 2019-12-01 21:28:39 1483 浏览量 回答数 0

回答

本文介绍AliSQL的内核版本更新说明。 MySQL 8.0 20200229 新特性 Performance Agent:更加便捷的性能数据统计方案。通过MySQL插件的方式,实现MySQL实例内部各项性能数据的采集与统计。 在半同步模式下添加网络往返时间,并记录到性能数据。 性能优化 允许在只读实例上进行语句级并发控制(CCL)操作。 备实例支持Outline。 Proxy短连接优化。 优化不同CPU架构下的pause指令执行时间。 添加内存表查看线程池运行情况。 Bug修复 在低于4.9的Linux Kenerls中禁用ppoll,使用poll代替。 修复wrap_sm4_encrypt函数调用错误问题。 修复在滚动审核日志时持有全局变量锁的问题。 修复恢复不一致性检查的问题。 修复io_statistics表出现错误time值的问题。 修复无效压缩算法导致崩溃的问题。 修复用户列与5.6不兼容的问题。 20200110 新特性 Inventory Hint:新增了三个hint, 支持SELECT、UPDATE、INSERT、DELETE 语句,快速提交/回滚事务,提高业务吞吐能力。 性能优化 启动实例时,先初始化Concurrency Control队列结构,再初始化Concurrency Control规则。 异步清除文件时继续取消小文件的链接。 优化Thread Pool性能。 默认情况下禁用恢复不一致性检查。 更改设置变量所需的权限: 设置以下变量所需的权限已更改为普通用户权限: auto_increment_increment auto_increment_offset bulk_insert_buffer_size binlog_rows_query_log_events 设置以下变量所需的权限已更改为超级用户或系统变量管理用户权限: binlog_format binlog_row_image binlog_direct sql_log_off sql_log_bin 20191225 新特性 Recycle Bin:临时将删除的表转移到回收站,还可以设置保留的时间,方便您找回数据。 性能优化 提高短连接处理性能。 使用专用线程为maintain user服务,避免HA失败。 通过Redo刷新Binlog时出现错误会显式释放文件同步锁。 删除不必要的TCP错误日志。 默认情况下启用线程池。 Bug修复 修复慢日志刷新的问题。 修复锁定范围不正确的问题。 修复TDE的Select函数导致的核心转储问题。 20191115 新特性 Statement Queue:针对语句的排队机制,将语句进行分桶排队,尽量把可能具有相同冲突的语句放在一个桶内排队,减少冲突的开销。 20191101 新特性 为TDE添加SM4加密算法。 保护备实例信息:拥有SUPER或REPLICATION_SLAVE_ADMIN权限的用户才能插入/删除/修改表slave_master_info、slave_relay_log_info、slave_worker_info。 提高自动递增键的优先级:如果表中没有主键或非空唯一键,具有自动增量的非空键将是第一候选项。 对系统表和处于初始化状态线程用到的表,不进行Memory引擎到MyISAM引擎的自动转换。 Redo Log刷新到磁盘之前先将Binlog文件刷新到磁盘。 实例被锁定时也会影响临时表。 添加新的基于LSM树的事务存储引擎X-Engine。 性能优化 Thread Pool:互斥优化。 Performance Insight:性能点支持线程池。 参数调整: primary_fast_lookup:会话参数,默认值为true。 thread_pool_enabled:全局参数,默认值为true。 20191015 新特性 TDE:支持透明数据加密TDE(Transparent Data Encryption)功能,可对数据文件执行实时I/O加密和解密,数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密。 Returning:Returning功能支持DML语句返回Resultset,同时提供了工具包(DBMS_TRANS)便于您快捷使用。 强制将引擎从MyISAM/MEMORY转换为InnoDB:如果全局变量force_memory/mysiam_to_innodb为ON,则创建/修改表时会将表引擎从MyISAM/MEMORY转换为InnoDB。 禁止非高权限账号切换主备实例。 性能代理插件:收集性能数据并保存到本地格式化文本文件,采用文件轮循方式,保留最近的秒级性能数据。 Innodb mutex timeout cofigurable:可配置全局变量innodb_fatal_semaphore_wait_threshold,默认值:600。 忽略索引提示错误:可配置全局变量ignore_index_hint_error,默认值:false。 可关闭SSL加密功能。 TCP错误信息:返回TCP方向(读取、读取等待、写入等待)错误及错误代码到end_connection事件,并且输出错误信息到错误日志。 Bug修复 支持本地AIO的Linux系统内,在触发线性预读之前会合并AIO请求。 优化表/索引统计信息。 如果指定了主键,则直接访问主索引。 20190915 Bug修复 修复Cmd_set_current_connection内存泄露问题。 20190816 新特性 Thread Pool:将线程和会话分离,在拥有大量会话的同时,只需要少量线程完成活跃会话的任务即可。 Statement Concurrency Control:通过控制并发数应对突发的数据库请求流量、资源消耗过高的语句访问以及SQL访问模型的变化,保证MySQL实例持续稳定运行。 Statement Outline:利用Optimizer Hint和Index Hint让MySQL稳定执行计划。 Sequence Engine:简化获取序列值的复杂度。 Purge Large File Asynchronously:删除单个表空间时,会将表空间文件重命名为临时文件,等待异步清除进程清理临时文件。 Performance Insight:专注于实例负载监控、关联分析、性能调优的利器,帮助您迅速评估数据库负载,找到性能问题的源头,提升数据库的稳定性。 优化实例锁状态:实例锁定状态下,可以drop或truncate表。 Bug修复 修复文件大小计算错误的问题。 修复偶尔出现的内存空闲后再次使用的问题。 修复主机缓存大小为0时的崩溃问题。 修复隐式主键与CTS语句的冲突问题。 修复慢查询导致的slog出错问题。 20190601 性能优化 缩短日志表MDL范围,减少MDL阻塞的可能性。 重构终止选项的代码。 Bug修复 修复审计日志中没有记录预编译语句的问题。 屏蔽无效表名的错误日志。 MySQL 5.7基础版/高可用版 20200229 新特性 Performance Agent:更加便捷的性能数据统计方案。通过MySQL插件的方式,实现MySQL实例内部各项性能数据的采集与统计。 在半同步模式下添加网络往返时间,并记录到性能数据。 性能优化 优化不同CPU架构下的pause指令执行时间。 Proxy短连接优化。 添加内存表查看线程池运行情况。 Bug修复 修复DDL重做日志不安全的问题。 修复io_statistics表出现错误time值的问题。 修复更改表导致服务器崩溃的问题。 修复MySQL测试用例。 20200110 性能优化 异步清除文件时继续取消小文件的链接。 优化Thread Pool性能。 thread_pool_enabled参数的默认值调整为OFF。 20191225 新特性 内部账户管理与防范:调整用户权限保护数据安全。 性能优化 提高短连接处理性能。 使用专用线程为maintain user服务,避免HA失败。 删除不必要的TCP错误日志。 优化线程池。 Bug修复 修复读写分离时mysqld进程崩溃问题。 修复密钥环引起的核心转储问题。 20191115 Bug修复 修复主备切换后审计日志显示变量的问题。 20191101 新特性 为TDE添加SM4加密算法。 如果指定了主键,则直接访问主索引。 对系统表和处于初始化状态线程用到的表,不进行Memory引擎到MyISAM引擎的自动转换。 性能优化 Thread Pool:互斥优化。 引入审计日志缓冲机制,提高审计日志的性能。 Performance Insight:性能点支持线程池。 默认开启Thread Pool。 Bug修复 在处理维护用户列表时释放锁。 补充更多TCP错误信息。 20191015 新特性 轮换慢日志:为了在收集慢查询日志时保证零数据丢失,轮换日志表会将慢日志表的csv数据文件重命名为唯一名称并创建新文件。您可以使用show variables like '%rotate_log_table%';查看是否开启轮换慢日志。 性能代理插件:收集性能数据并保存到本地格式化文本文件,采用文件轮轮循方式,保留最近的秒级性能数据。 强制将引擎从MEMORY转换为InnoDB:如果全局变量rds_force_memory_to_innodb为ON,则创建/修改表时会将表引擎从MEMORY转换为InnoDB。 TDE机制优化:添加keyring-rds插件与管控系统/密钥管理服务进行交互。 TCP错误信息:返回TCP方向(读取、读取等待、写入等待)错误及错误代码到end_connection事件,并且输出错误信息到错误日志。 Bug修复 修复DDL中的意外错误Error 1290。 20190925 参数修改 将系统变量auto_generate_certs的默认值由true改为false。 增加全局只读变量auto_detact_certs,默认值为false,有效值为[true | false]。 该系统变量在Server端使用OpenSSL编译时可用,用于控制Server端在启动时是否在数据目录下自动查找SSL加密证书和密钥文件,即控制是否开启Server端的证书和密钥的自动查找功能。 20190915 新特性 Thread Pool:将线程和会话分离,在拥有大量会话的同时,只需要少量线程完成活跃会话的任务即可。 20190815 新特性 Purge Large File Asynchronously:删除单个表空间时,会将表空间文件重命名为临时文件,等待异步清除进程清理临时文件。 Performance Insight:专注于实例负载监控、关联分析、性能调优的利器,帮助您迅速评估数据库负载,找到性能问题的源头,提升数据库的稳定性。 优化实例锁状态:实例锁定状态下,可以drop或truncate表。 Bug修复 禁止在set rds_current_connection命令中设置rds_prepare_begin_id。 允许更改已锁定用户的信息。 禁止用关键字actual作为表名。 修复慢日志导致时间字段溢出的问题。 20190510版本 新特性:允许在事务内创建临时表。 20190319版本 新特性:支持在handshake报文内代理设置threadID。 20190131版本 升级到官方5.7.25版本。 关闭内存管理功能jemalloc。 修复内部变量net_lenth_size计算错误问题。 20181226版本 新特性:支持动态修改binlog-row-event-max-size,加速无主键表的复制。 修复Proxy实例内存申请异常的问题。 20181010版本 支持隐式主键。 加快无主键表的主备复制。 支持Native AIO,提升I/O性能。 20180431版本 新特性: 支持高可用版。 支持SQL审计。 增强对处于快照备份状态的实例的保护。 MySQL 5.7三节点企业版 20191128 新特性 支持读写分离。 Bug修复 修复部分场景下Follower Second_Behind_Master计算错误问题。 修复表级并行复制事务重试时死锁问题。 修复XA相关bug。 20191016 新特性 支持MySQL 5.7高可用版(本地SSD盘)升级到三节点企业版。 兼容MySQL官方GTID功能,默认不开启。 合并AliSQL MySQL 5.7基础版/高可用版 20190915版本及之前的自研功能。 Bug修复 修复重置备实例导致binlog被关闭问题。 20190909 新特性 优化大事务在三节点强一致状态下的执行效率。 支持从Leader/Follower进行Binlog转储。 支持创建只读实例。 系统表默认使用InnoDB引擎。 Bug修复 修复Follower日志清理命令失效问题。 修复参数slave_sql_verify_checksum=OFF和binlog_checksum=crc32时Slave线程异常退出问题。 20190709 新特性 支持三节点功能。 禁用semi-sync插件。 支持表级并行复制、Writeset并行复制。 支持pk_access主键查询加速。 支持线程池。 合并AliSQL MySQL 5.7基础版/高可用版 20190510版本及之前的自研功能。 MySQL 5.6 20200229 新特性 支持Proxy读写分离功能。 性能优化 优化线程池功能。 优化不同CPU架构下的pause指令执行时间。 Bug修复 修复XA事务部分提交的问题。 20200110 新特性 Thread Pool:将线程和会话分离,在拥有大量会话的同时,只需要少量线程完成活跃会话的任务即可。 性能优化 异步清除文件时继续取消小文件的链接。 Bug修复 修复页面清理程序的睡眠时间计算不正确问题。 修复SELECT @@global.gtid_executed导致的故障转移失败问题。 修复IF CLIENT KILLED AFTER ROLLBACK TO SAVEPOINT PREVIOUS STMTS COMMITTED问题。 20191212 性能优化 删除不必要的tcp错误日志 20191115 Bug修复 修复慢日志时间戳溢出问题。 20191101 Bug修复 修复刷新日志时切换慢日志的问题,仅在执行刷新慢日志时切换慢日志。 修正部分显示错误。 20191015 新特性 轮换慢日志:为了在收集慢查询日志时保证零数据丢失,轮换日志表会将慢日志表的csv数据文件重命名为唯一名称并创建新文件。您可以使用show variables like '%rotate_log_table%';查看是否开启轮换慢日志。 SM4加密算法:添加新的SM4加密算法,取代旧的SM加密算法。 Purge Large File Asynchronously:删除单个表空间时,会将表空间文件重命名为临时文件,等待异步清除进程清理临时文件。 TCP错误信息:返回TCP方向(读取、读取等待、写入等待)错误及错误代码到end_connection事件,并且输出错误信息到错误日志。 引入审计日志缓冲机制,提高审计日志的性能。。 Bug修复 禁用pstack,避免存在大量连接时可能导致pstack无响应。 修复隐式主键与create table as select语句之间的冲突。 自动清除由二进制日志创建的临时文件。 20190815 优化实例锁状态:实例锁定状态下,可以drop或truncate表。 20190130版本 修复部分可能导致系统不稳定的bug。 20181010版本 添加参数rocksdb_ddl_commit_in_the_middle(MyRocks)。如果这个参数被打开,部分DDL在执行过程中将会执行commit操作。 201806** (5.6.16)版本 新特性:slow log精度提升为微秒。 20180426(5.6.16)版本 新特性:引入隐藏索引,支持将索引设置为不可见,详情请参见参考文档。 修复备库apply线程的bug。 修复备库apply分区表更新时性能下降问题。 修复TokuDB下alter table comment重建整张表问题,详情请参见参考文档。 修复由show slave status/show status可能触发的死锁问题。 20171205(5.6.16)版本 修复OPTIMIZE TABLE和ONLINE ALTER TABLE同时执行时会触发死锁的问题。 修复SEQUENCE与隐含主键冲突的问题。 修复SHOW CREATE SEQUENCE问题。 修复TokuDB引擎的表统计信息错误。 修复并行OPTIMIZE表引入的死锁问题。 修复QUERY_LOG_EVENT中记录的字符集问题。 修复信号处理引起的数据库无法停止问题,详情请参见参考文档。 修复RESET MASTER引入的问题。 修复备库陷入等待的问题。 修复SHOW CREATE TABLE可能触发的进程崩溃问题。 20170927(5.6.16)版本 修复TokuDB表查询时使用错误索引问题。 20170901(5.6.16)版本 新特性: 升级SSL加密版本到TLS 1.2,详情请参见参考文档。 支持Sequence。 修复NOT IN查询在特定场景下返回结果集有误的问题。 20170530 (5.6.16)版本 新特性:支持高权限账号Kill其他账号下的连接。 20170221(5.6.16)版本 新特性:支持读写分离简介。 MySQL 5.5 20181212 修复调用系统函数gettimeofday(2) 返回值不准确的问题。该系统函数返回值为时间,常用来计算等待超时,时间不准确时会导致一些操作永不超时。

游客yl2rjx5yxwcam 2020-03-08 13:18:55 0 浏览量 回答数 0

问题

【精品问答】前端开发必懂之JS技术二百问

茶什i 2019-12-01 22:05:04 146 浏览量 回答数 0

问题

MaxCompute最佳实践:修改不兼容SQL实战

行者武松 2019-12-01 22:09:22 4078 浏览量 回答数 0

问题

SaaS模式云数据仓库MaxCompute 百问百答合集(持续更新20200724)

亢海鹏 2020-05-29 15:10:00 9080 浏览量 回答数 2
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播