最近发现phpstorm超级好用,对PHP5.4以上支持十分好,所以果断抛弃神奇的eclipse哈哈~ 好,记录一下mac下得各种快捷键呢: command + a 全选 command + c 复制 command + v 粘贴 command + z 撤消 command + f 代码搜索 command + l 输入行号跳到某一行 command + o 查看一个类的结构 command + / 单行注释 command + e 列出最后打开的文件 ctrl + shift + / 块注释 shift + command + x shift + command + r 按文件名搜索对应文件所在路径 shift + command + t 按类名搜索对应文件所在路径 shift + command + c 复制当前文件所在路径 command + delete 删除整行 option + comman +enter 下面增加一行 command + D 复制出一行 command + B 函数追踪,同comaand + 单击 control + tab 打开的文件间切换 control + shift + tab 向上切换 control + up/down 在打开的mac应用程序窗口之间切换 在写好的函数上面,/** 然后回车,可以生成php doc注释,这个和一些编辑器的敲tab略有不同 option + command + O 搜索项目中函数,变量或者其他的标示符 shift + command + o 搜索项目中的文件 command + o 搜索项目中的类文件 ^+space 可以在 输入/之后使用,提示出文件列表
MySQL数据库MyISAM和InnoDB存储引擎的比较
MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。 MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。 InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。 主要区别:
- MyISAM是非事务安全型的,而InnoDB是事务安全型的。
- MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
- MyISAM支持全文类型索引,而InnoDB不支持全文索引。
- MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
- MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
- InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。
应用场景:
- MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
- InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
mysql 中 varchar 和 char 的区别
在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型。
char与varchar的区别 char (13)长度固定, 如’www.jb51.net‘ 存储需要空间 12个字符 varchar(13) 可变长 如’www.jb51.net‘ 需要存储空间 13字符, 从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。所以实际应用中用户可以根据自己的数据类型来做。 再看看char,与varchar在速度上的区别吧。
mysal>create tabe ab(v varchar(4),c char(4)); query ok ,0 rows affected(0.02 sec) mysql>insert into abc values(‘ab ‘,’ab ‘) query ok ,1 row affected(0.00 sec); mysql->select concat(v ,’+’) ,concat(c ,’+’) form abc ab + | ab+ 1rows in set (0.00 sec)
从上面可以看出来,由于某种原因char 固定长度,所以在处理速度上要比varchar快速很多,但是对费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。 注明: 在用char字符类型时内容后面有空间时必须作相关处理,要不就会把空格自动删除。 建意: myisam 存储引擎 建议使用固定长度,数据列代替可变长度的数据列。 memory存储引擎 目前都使用固定数据行存储,因此无论使用char varchar列都没关系, innodb 存储引擎 建意使用varchar 类型 以下是其它网友的补充 char是一种固定长度的类型,varchar则是一种可变长度的类型 char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节). 在MySQL中用来判断是否需要进行对据列类型转换的规则 1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的. 2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的. 3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型. 例外:长度小于4个字符的char数据列不会被转换为varchar类型 对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间; 对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利. 文章2: 字符应该是最常见的一种了,但似乎各个数据库都有所不同,比如oracle中就有啥varchar2之类。不过mysql似乎最多的还是集中在char和varchar上。 说说区别。char是固定长度的,而varchar会根据具体的长度来使用存储空间。比如char(255)和varchar(255),在存储字符串”hello world”的时候,char会用一块255的空间放那个11个字符,而varchar就不会用255个,他先计算长度后只用11个再加上计算的到字符串长度信息,一般1-2个byte来,这样varchar在存储不确定长度的时候会大大减少存储空间。 如此看来varchar比char聪明多了,那char有用武之地吗?还是很不少优势的。 一,存储很短的信息,比如门牌号码101,201……这样很短的信息应该用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储的现在得不偿失。 二,固定长度的。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。 三,十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的。 还有一个关于varchar的问题是,varchar他既然可以自动适应存储空间,那我varchar(8)和varchar(255)存储应该都是一样的,那每次表设计的时候往大的方向去好了,免得以后不够用麻烦。这个思路对吗?答案是否定的。mysql会把表信息放到内存中(查询第一次后,就缓存住了,linux下很明显,但windows下似乎没有,不知道为啥),这时内存的申请是按照固定长度来的,如果varchar很大就会有问题。所以还是应该按需索取。 总结:仔细看DZ的数据表,定长的字段基本还都是用char….
MySql 性能调试之 —— 开启慢查询日志
一、查看当前服务器是否开启慢查询: 1、快速办法,运行sql语句show VARIABLES like “%slow%” 2、直接去my.conf中查看。
二、开启慢查询:
在配置文件my.conf中配置 #记录地址 slow_query_log_file = /usr/local/mysql/var/slowquery.log #时间 long_query_time = 1 #单位是秒 #设置未启用索引的查询是否被记录 log_queries_not_using_indexes = 0 或者使用sql 语句来修改: set global slow_query_log_file = ‘/usr/local/mysql/var/slowquery.log’; set global slow_query_log = ON; set global long_query_time=1; #设置大于1s的sql语句记录下来 三、慢查询日志文件的信息格式: # Time: 130905 14:15:59 时间是2013年9月5日 14:15:59(前面部分容易看错哦,乍看以为是时间戳) # User@Host: root[root] @ [183.239.28.174] 请求mysql服务器的客户端ip # Query_time: 0.735883 Lock_time: 0.000078 Rows_sent: 262 Rows_examined: 262 这里表示执行用时多少秒,0.735883秒,1秒等于1000毫秒 SET timestamp=1378361759; 这目前我还不知道干嘛用的 show tables from `test_db`; 这个就是关键信息,指明了当时执行的是这条语句 四、调试: select sleep(0.13);
PHP session 跨域解决方法
web站点经常出现二级域名跨域的情况,例如:a.goodspb.com 、bbs.goodspb.com 这种情况!这个时候我们当然希望只要在www.goodspb.com登录之后在bbs.goodspb.com也同时登录了(用户系统一致的情况下)。因此,我们就需要另session跨域了! 我觉得常用的session跨域有2种。 一、配置PHP设置: 而这种方式可以在应用中设置或者直接配置php.ini 1、在session_start()之前配置:
在PHP中使用cURL上传文件
最近在做一个接口,接口中需要上传文件,一看肯定是需要使用curl无疑,让我再次记录:
PHP 浮点数运算
bcadd — 将两个高精度数字相加 bcsub — 将两个高精度数字相减 bccomp — 比较两个高精度数字,返回-1, 0, 1 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字余数 bcmul — 将两个高精度数字相乘 bcpow — 求高精度数字乘方 bcpowmod — 求高精度数字乘方求模,数论里非常常用 bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=” bcsqrt — 求高精度数字平方根 例子:
php正则方法去除html标签或者javascript,css标签
方法一:
1 | $str = "<div style='color:red'>test string</div><br /><p>abc</p><h1>yyyyyyyyyy</h1><a href=''>222</a>"; |
PHP CURL 发起POST , GET , DELETE , PUT 请求
1 | <?php |
RSA算法类
RSA可谓是可逆算法中最最常用的,再次摘抄一个小类~ 通过openssl实现的签名、验签、非对称加解密,需要配合x.509证书(如crt和pem)文件使用。