mysql general bin区别_MySQL_Mysql常见问题集锦,1,utf8_bin跟utf8_general_ci的区别 - phpStudy...
Mysql常见问题集锦
1,utf8_bin跟utf8_general_ci的区别
ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的;
bin 是二进制, a 和 A 会别区别对待.
例如你运行:
SELECT * FROM table WHERE txt = 'a'
那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以.
2,MyISAM 和 InnoDB
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
以下是一些细节和具体实现的差别:
◆1.InnoDB不支持FULLTEXT类型的索引。
◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。
我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。
原因如下:
1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。
2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。
3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数据库实例的数据量基本都是几十G大小。
4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。
5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。
6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。
7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。
当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。
另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。
3,Utf8_general_ci 和 utf8_unicode_ci的区别是什么
utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法,一些字符还是不能支持。
utf8_unicode_ci不能完全支持组合的记号。
utf8_general_ci是一个遗留的 校对规则,不支持扩展,它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用 utf8_unicode_ci的校对规则相比,比较正确性较差。
应用上的差别
1、对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。
2、utf8_general_ci也适用与德语和法语,除了‘?'等于‘s',而不是‘ss'之外。如果你的应用能够接受这些,那么应该使用 utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。
用一句话概况上面这段话:utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了
参考:
http://www.diybl.com/course/7_databases/mysql/myxl/20100721/474574.html
中文:http://hi.baidu.com/my_labs/blog/item/ea1a578360dc82ab0cf4d2c0.html
英文:http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
4,表名中含有特殊字符
select * from books where `book-id` = 'b001' 注意是数字键盘上1旁边的` 不是单引号
select * from `book-cate`
最好不要用特殊符号 用book_id就可以不用引号了相关阅读:
SQLite教程(九):在线备份
win10预览版10061人脉应用崩溃临时解决办法
关于img的href和src取变量及赋值的方法
告诉大家win10十大隐藏功能 win10隐藏功能汇总
简单对比C语言中的fputs()函数和fputc()函数
js清理Word格式示例代码
mysql主从数据库不同步的2种解决方法
Android应用开发中单元测试分析
CSS选择器种类及及其使用介绍
鼠标移入移出事件改变图片的分辨率的两种方法
win10开机黑屏30秒后才能进入系统的解决办法
win10预览版10130更新了什么?win10预览版10130更新内容大全
学习二维动态数组指针做矩阵运算的方法
在Mac OS下使用Node.js的简单教程
mysql general bin区别_MySQL_Mysql常见问题集锦,1,utf8_bin跟utf8_general_ci的区别 - phpStudy...相关推荐
- MySQL的utf8与utf8mb4编码,以及utf8_bin、utf8_general_ci编码区别
utf8和utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.utf8mb4是utf ...
- mysql general bin区别_MySQL中几种常见的日志
前言: 在 MySQL 系统中,有着诸多不同类型的日志.各种日志都有着自己的用途,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据.这些不同类型的日志有助于我们更清晰的了解数据库,在日 ...
- mysql general bin区别_MySQL_编码utf8_bin和utf8_general_ci的区别
编码区别 在mysql中存在着各种utf8编码格式,如下(新建数据库时一般选用utf8_general_ci就可以): utf8_bin:将字符串中的每一个字符用二进制数据存储,区分大小写(在二进制中 ...
- LNMP安装常见问题集锦(一)
2019独角兽企业重金招聘Python工程师标准>>> LNMP安装常见问题集锦(一) 1.ERROR: invalid PHP executable specified by TE ...
- Android常见问题集锦
Android常见问题集锦 前言:在开发中,每个人或多或少会遇到各种各样的问题,有些问题依据代码思路调试就可以定位出来,而大部分的问题都是经验性问题,遇到过就很容易解决,但在第一次遇到时往往会花费大量 ...
- android studio串号,AndroidStudio使用常见问题集锦
原标题:AndroidStudio使用常见问题集锦 配置AndroidStudio让编译更快 在个人.gradle文件夹下添加 gradle.properties 文件: 文件内容如下: org.gr ...
- ArcGIS Server常见问题集锦(转载)
ArcGIS Server常见问题集锦(转载) 安装部署问题 1 用户名问题 在GIS Server PostInstall过程中会涉及到两个用户,默认情况下一个ArcGISSOM,一个是Arc ...
- mysql r创建用户名_MySQL_mysql database manual(mysql数据库手册),2.1登入到mysql控制台[用户名为r - phpStudy...
mysql database manual(mysql数据库手册) 2.1登入到mysql控制台[用户名为root,密码缺省为空] 切换到mysql的bin目录cd d:/wamp/mysql/bin ...
- MySQL General、Slow日志介绍,参数及配置
MySQL General log MySQL General log是记录mysqld(MySQLserver进程)收到的所有请求的日志,我们可以通过这个命令查看格式: SHOW CREATE TA ...
最新文章
- JSON 之父新作,JavaScript “葵花宝典”参悟 JS 之道
- 算法提高 c++_ch04_02_修正版
- cad二次开发--添加对象到模型空间中
- Summary Ranges
- (boost::mp11::mp_rotate_left相关用法的测试程序
- java jpasswordfield_JAVA中JPasswordField实现密码的确认
- 从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分)
- Redis使用详细教程
- mysql锁问题吗_Mysql锁的问题和解析
- PDF文件怎么才能编辑里面的内容
- 比湿,相对湿度和绝对湿度
- Fragment如何实现左右分屏显示的
- 乐优商城之后台管理系统
- 最简单有效的Win10清理C盘的多个方法
- c语言中val是什么函数,val(val是什么意思)
- 安装windows server 2012在H3C服务器上
- 如何更改音频格式?分享这几个简单的转换方法给你
- 本地搭建Agriculture_KnowledgeGraph农业知识图谱环境时遇到的问题及解决办法
- 游戏策划学习:胧村正、百闻牌
- Sublime Text3批量更改文件内容
热门文章
- CWNP宣布中国首位CWNE获得者——朱志立(Kevin Zhu)
- 贴一个之前写的阴阳师源码,供各位学习
- 开源开放 | 一个用于文言文实体识别与关系抽取等任务的开源数据集C-CLUE(CCKS2021)...
- 【DQN高级技巧2】DQN高估问题:Target Network和Double DQN
- 计算机与师范数学的联系论文,数学师范生毕业论文
- Apache 开启和关闭 Keep-Alive 解决访问长连接问题
- mac备忘录 英文引号自动转中文引号
- JeeCms使用笔记
- ubuntu18.04 使用systemd方式添加开机运行sh脚本
- 无代码开发平台 有哪些?