云溪的 blog
  • Archive
  • Media
  • Search
  • Tags
  • About

Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at row 1

使用 gorm 插入数据时爆出 Error 1292: Incorrect datetime value: '0000-00-00' for column 'created_at' at row 1 的错误信息,搜索之后发现原来是因为 msyql5.7 及以上不允许时间戳字段插入 ‘0000-00-00’ 数据,修复方法也比较简单,去掉sql_model 中的 NO_ZERO_DATE 配置即可 方式一 sql 配置 使用 select @@GLOBAL.sql_mode; 查出原有的配置信息,将配置信息去除 NO_ZERO_DATE 并复制 使用 SET GLOBAL sql_mode = '去除 NO_ZERO_DATE 后的剩余配置项' 经过以上步骤就可以完成设置了。 方式二 配置文件配置 打开 mysql 配置文件: $ sodo vim /etc/my.cnf 在 [mysqld] 配置项下插入 sql_mode 配置 sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 重启 mysql 完成配置 sql_model 参数详解 ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。 STRICT_TRANS_TABLES: 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 NO_ZERO_IN_DATE: 在严格模式下,不允许日期和月份为零 NO_ZERO_DATE: 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。 ERROR_FOR_DIVISION_BY_ZERO: 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL NO_AUTO_CREATE_USER: 禁止GRANT创建密码为空的用户 NO_ENGINE_SUBSTITUTION: 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常 PIPES_AS_CONCAT: 将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似 ANSI_QUOTES: 启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符 参考链接 Error 1292 on update a row ...

December 22, 2018 · 1 min · 云溪

Centos 服务配置详解

systemd 介绍 CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,即:/usr/lib/systemd/system ,/usr/lib/systemd/user 创建 Service 文件 以 Supervisor 加入服务为例 [Unit] Description=Supervisor [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target 参数介绍 Unit: NAME DESCRIPTION ExecStartPre 在单元(Unit)开始前执行命令 ExecStart 在单元(Unit)开始时执行主命令 ExecStartPost 在 ExecStart 命令执行完毕之后执行 ExecReload 在单元(Unit)Reload 时执行主命令 ExecStop 在单元(Unit) Stop 时执行命令 ExecStopPost 在 ExecStop 配置命令执行完毕后执行 RestartSec 服务重启失败重试间隔时间 Type : 启动类型simple、forking、oneshot、notify、dbus Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。 Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。 Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。 Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。 Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。 ...

December 20, 2018 · 1 min · 云溪

公众号通过api发送小程序消息

接口调用请求说明 http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 发送普通消息的小程序链接 { "touser":"OPENID", "msgtype":"text", "text": { "content":"文本内容<a href="http://www.qq.com" data-miniprogram-appid="appId" data-miniprogram-path="pages/index/index">点击跳小程序</a" } } 说明: data-miniprogram-appid 项,填写小程序appid,则表示该链接跳小程序; data-miniprogram-path项,填写小程序路径,路径与app.json中保持一致,可带参数; 对于不支持data-miniprogram-appid 项的客户端版本,如果有herf项,则仍然保持跳href中的网页链接; data-miniprogram-appid对应的小程序必须与公众号有绑定关系 返回结果 {"errcode":0,"errmsg":"ok"} 发送效果 公众号推送小程序卡片 { "touser":"OPENID", "msgtype":"miniprogrampage", "miniprogrampage": { "title":"title", "appid":"appid", "pagepath":"pagepath", "thumb_media_id":"thumb_media_id" } } 返回结果 {"errcode":0,"errmsg":"ok"} 发送效果 参考链接 公众号文档

December 17, 2018 · 1 min · 云溪

redis实现分布式锁

起因 消息队列处理任务中,由于消息队列中有相同的处理请求并且消费端存在多个,因此出现了并发消费的问题,于是产生了利用分布式锁来锁定消费,保证同一时间只有一个请求在处理,找了一下分布式锁的实现方式常见的有: 基于数据库 基于Zookeeper 基于redis 选型 基于数据库相对来说,更直观,实现起来也比较简单,至于要设置一个唯一索引,在插入时判断是否正常插入,不能插入则说明获取锁失败,缺点是会增加数据库开销,增加数据库压力,所以此方案PASS。基于Zookeeper实现分布式锁,会引新的软件,将会增加原有系统的复杂度,因而此方案也PASS。基于 redis 本身是对内存的操作,相对来说效率会非常高,并且原有系统也已经存在了 redis ,因而也不会增加原系统的复杂度,所以选择了 redis 来实现分布式锁。 背景介绍 SETNX key value 将 key 的值设为 value ,当且仅当 key 不存在。若给的 key 已经存在,则 SETNX 不做任何动作。SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。 redis> EXISTS job # job 不存在 (integer) 0 redis> SETNX job "programmer" # job 设置成功 (integer) 1 redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败 (integer) 0 redis> GET job # 没有被覆盖 "programmer" 当 key 不存在时,返回 1, 如果设置的 key 存在时则返回 0 ,该操作本身具有原子性,因此可以利用 redis 此特性进行分布式锁实现的基础。 ...

December 14, 2018 · 1 min · 云溪

gitalk评论插件自动初始化

这只是个预告,耐心等待把。😀

November 29, 2018 · 1 min · 云溪
« Prev  Next  »
© 2025 云溪的 blog