0%

使用MySQL的时候很可能遇到字符集编码相关的问题,尤其是涉及到数据和程序中有中文字符的时候,如果不注意,可能遇到乱码或一些其他的错误。

本文详细解释MySQL相关的字符集编码设置和排序规则相关的问题。

MySQL Server的默认字符集配置

在默认安装MySQL的时候,MySQL Server使用的是英文字符集,服务端的默认配置一般是

character-set-server=latin1

collation-server =latin1_swedish_ci

注意latin1字符集是不支持中文的。第一行的character-set当然是指字符集,第二行的collation是指对应该字符集的比较和排序规则。

charset-server参考手册

阅读全文 »

首先是官方文档。这里使用的是新的Gradle SonarQube plugin,注意与以往的Gradle Sonar和Runner插件区分,官方不推荐使用旧插件。

SonarQube插件说明

Github示例可以参考java-gradle-simple,注意里面build.gradle脚本的写法,以及如何执行SonarQube的Task。

 

从今天起本Blog开始启用全站Https。
未来的大趋势嘛,哈哈!

30-021604_546.jpg

Jenkins在Ubuntu环境下的安装配置都比较简单,在安装好Java JDK之后,使用

sudo apt-get install jenkins

即可安装。因为没有用到后台数据库,配置过程一般就是配置端口号,以及Nginx或Apache server的代理即可。

详细方法可以参考官方安装指南

接下来就是与代码质量分析平台SonarQube的结合使用,前面已经说明了SonarQube的安装,然后就是利用Jenkins在进行持续集成的过程中,进行代码质量分析、代码覆盖率分析,并将相关数据和报告通知给SonarQube。

在Jenkins中的“系统管理”-“管理插件”中搜索安装SonarQube Plugin,因为我使用的是Java Gradle工程和JaCoCo测试报告,所以之前也安装了Gradle Plugin和JaCoCo Plugin,这里大家可以根据自己具体的项目选择。

阅读全文 »

安装依赖

JDK,数据库(以下以MySQL为例),操作系统支持Linux和Windows(文章以Linux Ubuntu 14.04为例)。

数据库配置

终端进入mysql-client:

mysql -u root -p

执行以下SQL语句建立数据库和相关用户:

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
阅读全文 »

在Ubuntu 14.04下安装PHP除了可以直接从官网下载源码编译安装,也可以PPA源安装。如果读者对编译安装的各种选项和配置方法不是很熟悉的话,则推荐使用这种方法快速安装。

在安装的时候,这里选择的是比较流行的一位个人作者维护的一个PPA源,具体的使用方法如下:

  1. 添加源。

    sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
  2. 如果有之前使用apt-get方法安装的PHP,先删除后再安装PHP7。

    sudo apt-get update
    sudo apt-get purge php5-common -y
    sudo apt-get install php7.0 php7.0-fpm php7.0-mysql -y
    sudo apt-get --purge autoremove -y
  3. 如果使用nginx,注意以下配置和相应的用户权限。

    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

参考:

今天在新版本下进行MongoDB数据导入的时候,遇到了这样一个问题,例如使用如下命令:

mongoimport -d test -c profile users.dat

在之前使用过几次这样的导入方法都没有问题,但这次却提示:

2016-01-20T10:05:25.228+0100    connected to: localhost
2016-01-20T10:05:25.735+0100    error inserting documents: lost connection to server
2016-01-20T10:05:25.735+0100    Failed: lost connection to server
2016-01-20T10:05:25.735+0100    imported 0 documents

查看MongoDB的Log,发现出现异常的原因,如下:

2016-01-20T11:26:39.103+0800 I -        [conn17] Assertion: 10334:BSONObj size: 33562755 (0x2002083) is invalid. Size must be between 0 and 16793600(16MB) First element: insert: "Profile"

搜索解决方案,发现这是mongo工具包在新版本下的小bug,mongorestore和mongoimport都有一样的问题,官方说明可以参考https://jira.mongodb.org/browse/TOOLS-939

原因就是bulk write api,原来的api中批量写入的batch size最大是32MB,现在已经变为16MB了。在导入或还原数据的时候,指定选项 –batchSize=1000,指定一个较小的值即可,默认是10000。

参考:

  1. http://stackoverflow.com/questions/33475505/mongodb-mongoimport-loses-connection-when-importing-big-files
  2. https://jira.mongodb.org/browse/TOOLS-939
  3. http://chenzhou123520.iteye.com/blog/1641319

在Debian中iptables命令输完之后会立刻生效,但重启之后配置就会消失,Debian提供了一个iptables-save程序快速保存配置。

通过iptables-save和iptables-restore可以让debian自动保存并在开机时自动加载iptables规则。

1、将iptables配置保存到/etc/iptables,这个文件名可以自己定义,与下面的配置一致即可

iptables-save > /etc/iptables

2、创建并编辑自启动配置文件,内容为启动网络时恢复iptables配置

sudo vim /etc/network/if-pre-up.d/iptables

文件内容为:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables

保存并退出。

之后系统每次启动时iptables就可以自动加载规则了。

MySQL手册中FIND_IN_SET函数的语法:

FIND_IN_SET(str, strlist)

Returns a value in the range of 1 to N if the string str is in the string list strlist consisting of N substrings. A string list is a string composed of substrings separated by , characters. If the first argument is a constant string and the second is a column of type SET, the FIND_IN_SET() function is optimized to use bit arithmetic. Returns 0 if str is not in strlist or if strlist is the empty string. Returns NULL if either argument is NULL. This function does not work properly if the first argument contains a comma (,) character.

假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。
一个字符串列表就是一个由一些被‘,’符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。
如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

阅读全文 »

http://www.ruanyifeng.com/blog/2 … ule_definition.html
为什么讲到JS的模块化编程,也是最近在应用Echarts图标库需要面对的一个问题。
可以参考Echarts引入的方法:
http://echarts.baidu.com/doc/doc.html#引入ECharts
在之前的开发中,为了使用简便,直接采用第三种引入单文件的方式,比较简单,
<script src=”js/echarts-all.js”></script>
就可以了,这样就引入了Echarts所有的图标和地图数据,这个文件是900KB,也就是说,
无论你在页面中使用几种图表,都需要加载接近1MB大小的JS库文件,效率还是比较低下的。
比较推荐的方法是参考JS的模块化编程和AMD规范,当然使用模块化编程主要不是为了解决
加载过多的问题,对于代码的规范和质量都有比较大的帮助。
Echarts本身使用了require.js,在前台开发中也可以尝试自己使用require.js。
简单介绍:http://www.ruanyifeng.com/blog/2012/11/require_js.html
官网:http://requirejs.org/

建议推荐一个SeaJS 的 CMD 规范,与 AMD 非常类似,在国内的影响力非常大,也非常易于使用,是国人开发的,在 github 上的更新、互动非常频繁。
http://seajs.org
https://github.com/seajs/seajs

两个的区别
http://www.zhihu.com/question/20351507/answer/14859415

http://segmentfault.com/a/1190000000733959