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...相关推荐

  1. MySQL的utf8与utf8mb4编码,以及utf8_bin、utf8_general_ci编码区别

    utf8和utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.utf8mb4是utf ...

  2. mysql general bin区别_MySQL中几种常见的日志

    前言: 在 MySQL 系统中,有着诸多不同类型的日志.各种日志都有着自己的用途,通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据.这些不同类型的日志有助于我们更清晰的了解数据库,在日 ...

  3. mysql general bin区别_MySQL_编码utf8_bin和utf8_general_ci的区别

    编码区别 在mysql中存在着各种utf8编码格式,如下(新建数据库时一般选用utf8_general_ci就可以): utf8_bin:将字符串中的每一个字符用二进制数据存储,区分大小写(在二进制中 ...

  4. LNMP安装常见问题集锦(一)

    2019独角兽企业重金招聘Python工程师标准>>> LNMP安装常见问题集锦(一) 1.ERROR: invalid PHP executable specified by TE ...

  5. Android常见问题集锦

    Android常见问题集锦 前言:在开发中,每个人或多或少会遇到各种各样的问题,有些问题依据代码思路调试就可以定位出来,而大部分的问题都是经验性问题,遇到过就很容易解决,但在第一次遇到时往往会花费大量 ...

  6. android studio串号,AndroidStudio使用常见问题集锦

    原标题:AndroidStudio使用常见问题集锦 配置AndroidStudio让编译更快 在个人.gradle文件夹下添加 gradle.properties 文件: 文件内容如下: org.gr ...

  7. ArcGIS Server常见问题集锦(转载)

    ArcGIS Server常见问题集锦(转载) 安装部署问题 1 用户名问题    在GIS Server PostInstall过程中会涉及到两个用户,默认情况下一个ArcGISSOM,一个是Arc ...

  8. 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 ...

  9. MySQL General、Slow日志介绍,参数及配置

    MySQL General log MySQL General log是记录mysqld(MySQLserver进程)收到的所有请求的日志,我们可以通过这个命令查看格式: SHOW CREATE TA ...

最新文章

  1. JSON 之父新作,JavaScript “葵花宝典”参悟 JS 之道
  2. 算法提高 c++_ch04_02_修正版
  3. cad二次开发--添加对象到模型空间中
  4. Summary Ranges
  5. (boost::mp11::mp_rotate_left相关用法的测试程序
  6. java jpasswordfield_JAVA中JPasswordField实现密码的确认
  7. 从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分)
  8. Redis使用详细教程
  9. mysql锁问题吗_Mysql锁的问题和解析
  10. PDF文件怎么才能编辑里面的内容
  11. 比湿,相对湿度和绝对湿度
  12. Fragment如何实现左右分屏显示的
  13. 乐优商城之后台管理系统
  14. 最简单有效的Win10清理C盘的多个方法
  15. c语言中val是什么函数,val(val是什么意思)
  16. 安装windows server 2012在H3C服务器上
  17. 如何更改音频格式?分享这几个简单的转换方法给你
  18. 本地搭建Agriculture_KnowledgeGraph农业知识图谱环境时遇到的问题及解决办法
  19. 游戏策划学习:胧村正、百闻牌
  20. Sublime Text3批量更改文件内容

热门文章

  1. CWNP宣布中国首位CWNE获得者——朱志立(Kevin Zhu)
  2. 贴一个之前写的阴阳师源码,供各位学习
  3. 开源开放 | 一个用于文言文实体识别与关系抽取等任务的开源数据集C-CLUE(CCKS2021)...
  4. 【DQN高级技巧2】DQN高估问题:Target Network和Double DQN
  5. 计算机与师范数学的联系论文,数学师范生毕业论文
  6. Apache 开启和关闭 Keep-Alive 解决访问长连接问题
  7. mac备忘录 英文引号自动转中文引号
  8. JeeCms使用笔记
  9. ubuntu18.04 使用systemd方式添加开机运行sh脚本
  10. 无代码开发平台 有哪些?