课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据库的编程开发是后端开发程序员经常实现的一个编程开发项目,而今天我们就一起来了解一下,在操作数据库上都有哪些基本语法与校验规则。
基本语法:
MySQL语句以分号结尾;
MySQL语句关键字不区分大小写。例如,不管写成CREATE还是create,效果是一样的,不过为了便于区分还是建议MySQL关键字大写,字段名和表名小写。
CHARACTER SET
字符集,表示数据库的文字编码方式,上图中设置的是utf8,如果没有设置则采用默认值,这个默认值可以通过my.ini配置文件来修改,(MySQL8默认字符集是utf8mb4)
COLLATE
校验规则,校验规则影响如下:
1.查询结果的影响:如果是utf8_general_ci表示不区分大小写,如果是utf8_bin则表示区分大小写
2.对order by子查询的结果有影响
如果在数据库下创建表,那么在默认情况下,表将会使用对应的数据库的字符集和校验规则,如果在创建表的时候指定了新的字符集和校验规则,则以当前表的设置为准。
在创建数据库指定字符集时,可以用character set utf8,也可以用charset=utf8,两种均可。
字符集和校验规则
字符集是一套符号和编码。校验规则是在字符集内用于比较字符的一套规则。
字符集
MySQL5.5.3之后增加了utf8mb4字符编码,多使用四个字节存储字符
utf8mb4是utf8的超集并完全兼容utf8,能够用四个字节存储更多的字符。
有了utf8,为什么要用utf8mb4?
标准的UTF-8字符集编码是可以使用1-4个字节去编码21位字符,这几乎包含了世界上所有能看见的语言。
而mysql支持的 utf8 编码大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。
MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。
当然了,如果我们能够确定数据库中不会存储四字节字符,完全可以使用utf8编码,因为这样更加节省空间。
我们可以通过select version()查看数据库的版本,以确定是否支持utf8mb4。
校验规则
是在字符集内用于比较字符的一套规则,比如定义'A'<'B'这样的关系的规则。不同collation可以实现不同的比较规则,如'A'='a'在有的规则中成立,而有的不成立;进而说,就是有的规则区分大小写,而有的无视。
utf8mb4对应的校验规则有utf8mb4_unicode_ci、utf8mb4_general_ci
utf8mb4_unicode_ci和utf8mb4_general_ci的对比:
准确性
utf8mb4_unicode_ci是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序
utf8mb4_general_ci没有实现Unicode排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。
但是,在绝大多数情况下,这些特殊字符的顺序并不需要那么精确。
性能
utf8mb4_general_ci在比较和排序的时候更快
utf8mb4_unicode_ci在特殊情况下,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
但是在绝大多数情况下发,不会发生此类复杂比较。相比选择哪一种collation,使用者更应该关心字符集与排序规则在db里需要统一。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!