MySQL统计某个字段数据包含指定字符串的出现次数

0 条评论

MySQL 提供了很多内置的统计函数,可以很方便地做数据统计,比如 LENGTH 可以统计字段字符数。

但 MySQL 却没有提供一个函数可以统计指定字符串个数,或者说是出现次数的函数,类似于 php 的 substr_count。

而解决办法是用已有的 LENGTH 函数变通一下,也就是将字段长度减去字段内容不要指定字符串的长度。

SELECT LENGTH(zhetenga) - LENGTH(REPLACE(zhetenga, ',', '')) as times FROM TABLE

用以上 SQL 即可得到 zhetenga 字段中逗号(,)的出现次数。

2016年01月05日阅读全文

mac osx配置只让部分请求走vpn网络

0 条评论

为了某种需要,我得长期连着一个 vpn,但问题是如果连了 vpn 后默认所有的流量都会走这个 vpn,显然这不是我想要的。

这个需求也是有办法实现的,首先在网络设置中,将此 vpn 的高级配置中的 Send all traffic over VPN connection 不选。

然后,sudo touch /etc/ppp/ip-up && sudo chmod 755 /etc/ppp/ip-up,这个脚本在连接 vpn 后会执行。

最后在 /etc/ppp/ip-up 里写上 /sbin/route add -net 192.168.100.0/24 -interface ppp0 。

这样,只有 192.168.100.0/24 的请求才会走vpn,而其它的都走原来的网络。

2015年12月14日阅读全文

nginx 里实现多重嵌套 if 配置

0 条评论

在配置 nginx 的时候,有时候往往会有多重嵌套 if 的需求,例如判断 a = b 并且 b = c 时才执行某个配置段。

作为一个程序员,很容易就想到代码式的配置,例如:

if ($host ~* "zhetenga.com" && $request_uri = "/zhetenga.com/") {

...

}

但很明显,这样是不行的,nginx 会直接告诉你这段配置是错误的,那就改为:

if ($host ~* "zhetenga.com") {

if ($request_uri = "/zhetenga.com/"") {

...

}

}

很明显,nginx 会再次拒绝你。

那么是不是就没有办法实现这种需求了呢?其实并不是的,强大的 nginx 配置让你有办法变通一下。

if ($host ~* "zhetenga.com") {

set $test "A";

}

if ($request_uri = "/zhetenga.com/"") {

set $test "${test}+B";

}

if ($test = "A+B") {

...

}

完美解决,折腾起来吧。

2015年12月01日阅读全文

nginx add_header 配置在某些状态码下不生效

0 条评论

在 nginx 配置里加了一条 add_header 的配置,测试发现在 403 404 这些状态下并不会输出已配置的头,而 200 状态下却是正常的。

查了一下文档,发现说明上有写,add_header 配置只有在 200, 201, 204, 206, 301, 302, 303, 304, or 307 这些状态下才有效。

这是一个很奇怪的限制,最后在 nginx 论坛发现了一段回复,说之所以这样限制是因为 add_header 在一些错误状态码下会产生意外的作用,比如添加一个 expires 1y 后,会让错误状态意外地缓存超长的时间,导致意外事故。

解决办法也是有的,在 1.7.5 版本之后,可以添加一个 always 参数,这样就会总是可以输出配置的头部,风险自负。

2015年12月01日阅读全文

SQLAlchemy ORM实现计数器字段的原子递增

0 条评论

使用数据库时,经常会遇到计数器字段递增的需求,如果使用MySQL命令很容易做到这一点,如:

UPDATE table SET counter=counter+1 WHERE domain='zhetenga.com';。

在使用 SQLAlchemy ORM 时,更新数据通常使用:

m = Model.query.first()

m.counter = Model.counter + 1

但是这样操作并不是原子操作,并发时是有问题的。

而要使用原子操作也是有办法的,代码如下:

session.query(table).update({table.counter: table.counter + 1})

session.commit()

2015年11月04日阅读全文

linux删除带中划线的文件或文件夹

0 条评论

在 linux 命令行下,一不小心执行了命令 mkdir zhetenga.com/zhetenga.com -p,本来是想创建一个深目录的,没想到 -p 放在后面 mkdir 同时创建了一个名为 -p 的目录。

尝试 rm -rf -p,提示 rm: illegal option -- p,shell 自然地把 -p 当成参数了。

于是尝试 rm -rf \-p,还是一样的结果,这招在这个时间并没有用。

于是再尝试 rm -rf ./-p,成功删除。

所以要想删除带中划线的文件或文件夹,可以通过加上当前目录的符号来指定这是在删除文件或文件夹。

2015年10月10日阅读全文

PHP中SERVER_NAME和HTTP_HOST的区别

0 条评论

PHP 的 $_SERVER 中有两个元素,SERVER_NAME 和 HTTP_HOST,这两元素的值有时候是相同的,而有时候又是不相同的,那么它们的区别是什么呢?

从字面来理解,SERVER_NAME 是服务器的名称,而 HTTP_HOST 是 HTTP HOST。

事实上的确也是这样,SERVER_NAME 是服务器的名字,它是由 apache、nginx 等服务器软件的配置来决定的。

apache 用 ServerName 来指定 SERVER_NAME,例如 ServerName www.zhetenga.com。

nginx 则用 server_name 来指定 SERVER_NAME,例如 server_name www.zhetenga.com。

需要注意的是如果指定了多个域名作为 server_name,nginx 总以第一个为准,很多人不知道然后在多域名网站中就会遇坑。

而 HTTP_HOST 则来自于 HTTP 协议中的 HTTP 头中的 HOST,它是由客户端发起请求的时候决定的。

这意味着,如果配置的名称和客户端请求的参数是一致的话,它们的值才会相同,否则就是不同的。

例如 server_name 设置了 zhetenga.com,浏览器访问时用的是 www.zhetenga.com,这个时候 SERVER_NAME 是 zhetenga.com,HTTP_HOST 是 www.zhetenga.com。

2015年09月26日阅读全文

golang 设置 http response 响应头...

0 条评论

用 golang 写 http server 时,可以很方便可通过 w.Header.Set(k, v) 来设置 http response 中 header 的内容。

例如:w.Header().Set("Access-Control-Allow-Origin", "*") 。

但是需要特别注意的是某些时候不仅要修改 http header ,还要修改 http status code。

修改 http status code 可以通过:w.WriteHeader(code) 来实现,例如:w.WriteHeader(404) 。

如果这两种修改一起做,就必须让 w.WriteHeader 在所有的 w.Header.Set 之后,也就是 w.WriteHeader 后 Set Header 是无效的。

今天就遇到了这个问题,在一段代码中调用 w.Header.Set,怎么折腾都无效,最后才发现其它代码段中先调用了 w.WriteHeader。

2015年09月24日阅读全文

ssh私钥id_rsa取消密码passphrase

0 条评论

为了私钥的安全,私钥可以设置一个密码。增加密码无疑会提高安全,但很多时候用起来却比较麻烦。

如果突然想取消密码,也是可以的,方法是使用 openssl 重新生成不带密码的私钥,命令如下:

openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup

mv ~/.ssh/id_rsa_new ~/.ssh/id_rsa

chomd 600 ~/.ssh/id_rsa

通过以上命令可以将原私钥备份并重新生成不带密码的私钥。执行上面的第一条命令会要求输入原密钥密码。

2015年07月28日阅读全文

mysql保存了类似问号的乱码怎么办

0 条评论

mysql 乱码问题相信很多人都遇到过,但一般人遇到的乱码多是字符集不匹配导致的,只要设置正确即可一切正常。

有一种情况是保存的时候就出现了问题,由于写库时写入了不完整的字符,mysql存下来的就是不完整的字符,这种字符一般会显示为一个类似问号的样子。

如果数据库中存了大量这样的字符,并且夹在正常文字当中,就十分无奈了。

试过 Google 无数次这个问题,由于关键字不对或者没人遇过,搜索到的内容都是set names解决的,更加无奈。

这个有问题的库一直放在那无奈着,今天突发灵感,试了下直接在 mysql 命令中粘贴上这个奇怪的问号字符,居然成功了,太神奇了。

select * from zhetenga.com where name like '%?%';

mysql保存了类似问号的乱码怎么办 图1

于是问题也很好解决了,能 select 就能 update,于是执行如下 mysql 命令解决。

update zhetenga.com set name=replace(name, '?', '') where name like '%?%';

以上两个 sql 中的 ? 为乱码字符,如上面图片所示,不便写在内容中,所以改为问号。

2015年07月05日阅读全文
  1. «
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  12. 11
  13. 12
  14. 13
  15. 14
  16. 15
  17. ...
  18. 17
  19. »