分类 技术学习 下的文章

关于MySQL存储时间字段的类型相关总结

一般我们用 MySQL 来存储时间时会考虑使用 datetime、timestamp、int 几种类型。

int

用 int 类型的字段时,我们一般是存储 10 位数字的时间戳,也可以用 bigint 存储精确到毫秒的时间戳。

优势:无关乎时区;占用存储空间小,查询效率稍高
劣势:可读性差

在一些数据量很大,对性能要求较高的场景可以考虑使用。

datetime

datetime 类型在 MySQL 的不同版本直接有一定差异,

  • MySQL 5.6.4 支持存储微秒,详见 MySQL 5.6.4 ChangeLog
  • MySQL 5.6 支持默认值为 CURRENT_TIMESTAMPNOW()

优势:不存在 2038 年问题;可读性高;时间精度高;不对时区处理,原样存储
劣势:性能稍差一些,不过随着 MySQL 性能越来越高,这点劣势也逐渐不重要起来

timestamp

劣势:存在 2038 年问题;时区存储存在转换

不太推荐使用

性能比较

MySQL 5.4 MyISAM

MySQL 5.4 InnoDB

MySQL Date Format: What Datatype Should You Use? We Compare Datetime, Timestamp and INT

参考文档:

MySQL存储时间用int、timestamp还是datetime?

vim 常用命令整理

进入插入模式

  • i 在光标所在字符前进入插入模式
  • a 在光标所在字符后进入插入模式
  • s 删除光标所在位置字符并进入插入模式
  • cw 删除光标所在位置至当前单词结尾内容并进入插入模式
  • c$ 删除光标所在位置至当前行结尾内容并进入插入模式
  • cc 删除光标所在行所有内容并进入插入模式

  • o 在当前行下方插入新行并进入插入模式

  • O 在当前行上方插入新行并进入插入模式

删除

  • x 删除光标所在位置字符
  • dw 删除光标所在位置至当前单词结尾内容
  • d$ 删除光标所在位置至当前行结尾内容
  • dd 删除当前行,删除内容会进入 vim 剪贴板
  • d{n}d 删除n行,例:d3d 为删除3行

复制

  • yy 复制当前行
  • y{n}y 复制n行,例:y3y 为复制3行

移动

  • h,j,k,l
  • gg 到文档顶部
  • G 到文档底部

其他

  • u 撤销操作
  • = 格式化

命令

  • :%s/search/replace/g 全局查找替换
  • :w !sudo tee % 保存时获取sudo权限

第三方登录和支付开发记录

登录

微信登录

微信登录需要注意的一点是微信的网页应用、移动应用、公众号的上限都是10个,所有同一个账号下的应用获取到的 union_id 是相同的,open_id 不同,所以需注意应用数量是否会超过上限。

微信登录目前只有APP登录、扫码登录和公众号登录三种登录方式,在微信浏览器内打开网页使用的是公众号登录的方式,其他浏览器只能使用扫码登录,换句话说目前移动端非微信浏览器打开的网页基本无法使用微信登录。

微信登录所需的信息基本在微信开放平台中,open.weixin.qq.com。新建应用需经过审核,一般两三个工作日内就会有反应,修改信息后需要重新审核的情况下,应用会以此次修改信息之前的状态正常运行,所以不必担心上线后改动应用基本信息。

扫码登录

使用场景为pc端浏览器打开网页时用手机扫描二维码进行登录,移动段浏览器虽然也可以通过将图片保存下来后使用微信扫描等方式实现登录,但是十分不方便而且成功率较低。

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=37dc565662c0fbc0f5c485f884f25f4da6f01b19&lang=zh_CN

公众号登录

使用场景为通过微信自带浏览器打开网页时唤起微信授权登录页面进行授权登录。

文档见 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432&token=&lang=zh_CN 中的微信网页授权章节

公众号登录的一个神奇疑似bug:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxa77178c0a05b6498&redirect_uri=http%3A%2F%2Fh5.2144.com%2Fsite%2Fauth%3Fauthclient%3Dweixin-mp&scope=snsapi_userinfo&response_type=code

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxa77178c0a05b6498&response_type=code&redirect_uri=http%3A%2F%2Fh5.2144.com%2Fsite%2Fauth%3Fauthclient%3Dweixin-mp&scope=snsapi_userinfo

上面两个链接除了参数的顺序不同之外完全相同,但是上面那个链接可以正常显示授权页面,下面那个则不可以,具体触发原因不明(貌似appid和redirect_uri不相邻则不行),貌似下面那个链接非百分百无法访问。~~这个问题简直搞死我了~~

原生APP登录

移动端通过sdk进行登录后就能获取到所需的用户信息,然后客户端把这些信息传给服务端,服务端相比前两种方式省去了通过授权码获取用户信息的步骤。

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=41d9521a6fd56f08d54a099d4952c5fecaa86441&lang=zh_CN

QQ登录

QQ登录如果要做平台化的话,需要用union_idunion_id需要发邮件申请打通应用间数据才能获取到。

QQ登录所需的信息在QQ互联:https://connect.qq.com/中,而不是QQ开放平台。如果是公司使用,建议不要使用个人账号进行注册,否则会带来很多麻烦。

微博登录(待续)

支付

支付宝支付

即时到账

https://doc.open.alipay.com/docs/doc.htm?treeId=108&articleId=103950&docType=1

手机网站支付

https://doc.open.alipay.com/docs/doc.htm?treeId=193&articleId=105288&docType=1

APP支付

https://doc.open.alipay.com/docs/doc.htm?treeId=204&articleId=105051&docType=1

微信支付

扫码支付

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

该支付方式适用于在pc网页上显示支付二维码进行扫码支付的场景。

公众号支付

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

该方式适用于使用微信自带浏览器打开网页时进行支付的场景。

APP支付

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1

该支付方式适用于原生APP内进行支付的场景。

H5支付

https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1

该支付方式适用于手机普通浏览器打开网页时进行支付的场景,但是改方式腾讯还在内测中,只开放给特定商户使用。详见:非微信内wap版微信支付

Yii2 使用jsonp格式response时遇到的一个坑

最近的一个项目在实现前后端分离时,由于调用域名与接口域名可能不相同,所以使用了jsonp格式进行返回,但是在开发环境上开了debug的情况下遇到500错误时竟然没有任何错误显示,也即response body是空的,这让我很困扰。

通过查看 Yii 写的文件日志发现,这是 Yii 在默认的 ErrorHandler 中没有对 jsonp 格式返回进行特殊处理造成的,于是便在 github 上提了一个 issue。从回复来看,一年前就有人修改了jsonpformatter的实现,不过由于会破坏兼容性,所以一直没正式接收。话说原本的jsonp实现方式实在是太坑了,和其他几种Formatter的实现不一致,使用起来很不方便,希望Yii官方早点改掉吧。