JAVA-and-J2EE

mysql支持存储emoji在5.5.3版本以后支持

星期一, 五月 2nd, 2016 | JAVA-and-J2EE, linux | 没有评论

在做基于办公的沟通软件中,常用一些emoji的聊天版本,发现在mysql中无法存储.

因为emoji表情在存储时转成的四个字节(\xF0\x9F\x90\xAC);
由于数据库使用的是utf8字符集utf8_general_ci,这个校对规则(collation)最大只支持3个字节,所以四个字节的emoji就会存储不全,从而取出无法显示.

简要说明

上文提到的 utf8_general_ci 与 ut8_unicode_ci 是utf8的两种字符编码方式,不同之处就是对字符的分类(sorting)和对比(comparison)。

MySQL 5.5.3及以后版本支持使用utf8mb4字符集,它在与utf8数据格式处理性能相同基础上加强了对字符码位(code point)的处理能力。与utf8对应的,utf8mb4有 utf8mb4_general_ci 和 utf8mb4_general_ci 。

utf8mb4_general_ci 基于Unicode standard sorting与comparison,支持更多的语言种类。
utf8mb4_general_ci 不能解析所有的Unicode分类规则,在一些特别的语言或字符处理上存在一定的问题。不过在性能上,它能更快的sorting、comparison,因其采用一组性能相关的快捷方式(performance-related shortcuts)。
解决办法

通过上文我们已经知道一种解决办法了,但有一个硬性条件就是你的数据库版本。当你的数据库版本没有达到5.5.3怎么办呢…总结一下,mysql支持存储emoji表情的方法,至少有两种。

1.修改数据库编码为utf8mb4,前提是你的mysql数据库版本必须得是5.5.3及以后的
2.将带emoji的文本转为base64来进行存储,返回时进行相应解码返回
下面介绍我如何使用第一种方法:

将数据库编码由utf8改为utf8mb4

set character_set_client      = utf8mb4;                       
set character_set_connection  = utf8mb4;                       
set character_set_database    = utf8mb4;                       
set character_set_results     = utf8mb4;                       
set character_set_server      = utf8mb4;

将已经生成的表也转成utf8mb4

ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

小记:直接在这个层面上解决,省了在代码中转和处理方便很多.

Tags: , ,

CentOS6.5安装配置postfix邮件系统 启用并配置SMTP虚拟账户

星期三, 三月 9th, 2016 | JAVA-and-J2EE, linux, php | 一条评论

CentOS6.5_64位系统下安装配置postfix邮件系统 启用并配置SMTP虚拟账户 实录
开启用户注册的邮件检验功能,需要发送邮件,使用其他服务商的邮件服务总有每日和发送间隔发送邮件限制.
废话不多说主要实现功能为设置postfix配置,启用smtp服务帐号,只用来发送邮件验证和newsletter邮件

一:配置postfix及简单简介

开始之前,先介绍几个枯燥的名词:

MUA:用户代理端,即用户使用的写信、收信客户端软件。比如:outlook、foxmail等客户端软件,乃至通过浏览器登录邮箱并发送邮件的BS架构网页也算是MUA。
MTA:邮件传送端,即常说的邮件服务器,用于转发、收取用户邮件。本文之中的postfix实现的就是MTA,当然postfix也是一种特殊的MUA,不再深入介绍,本文之中仅把postfix当做MTA使用。
MDA:邮件代理端,相当于MUA和MTA的中间人,可用于过滤垃圾邮件。
POP:邮局协议,当前是第三版,也就是POP3,用于MUA连接服务器收取用户邮件,通信端口110。
IMAP:互联网应用协议,功能与POP类似:也用于MUA连接服务器收取用户邮件;功能较POP多,通信端口143。
SMTP:简单邮件传送协议,MUA连接MTA或MTA连接MTA发送邮件使用此协议,通信端口25,启用ssl/tls的情况下端口为465或587。
一般发邮件的步骤流程是:

1、MUA通过POP、IMAP或SMTP协议连接MTA(称之为mta1);本文之中php通过phpmailer请求发送邮件的php脚本就扮演了MUA的角色,而postfix就是MTA;

2、MUA发送邮件给mta1(或者说MUA通过mta1发送邮件);本文中postfix就是这个mta1;

3、mta1与其他的MTA自主沟通连接将邮件传送至指定域下的指定用户(此时mta1就扮演了MUA的角色功能,这种交互是由邮件系统软件自主实现,与用户端无关)。

本次搭建postfix目的很明确:
› Continue reading

Tags: , ,

Base64.encodeBase64String换行回车解决方法

星期四, 二月 18th, 2016 | JAVA-and-J2EE | 没有评论

在做接口对接的时候老是报签名错误,一步一步跟踪到原来是Base64出的问题,记录下:

据RFC 822规定,每76个字符,还需要加上一个回车换行
就因为这些换行弄得出了问题,解决办法如下,替换所有换行和回车

1
2
3
4
5
private static String base64(String str, String charset) throws UnsupportedEncodingException {
		String encoded = Base64.encodeBase64String(str.getBytes(charset));
		encoded = encoded.replaceAll("[\\s*\t\n\r]", "");
		return encoded;
	}

小计:在php环境下不存在此问题

1
2
3
4
5
6
7
8
9
/**
 * 电商Sign签名生成
 * @param data 内容   
 * @param appkey Appkey
 * @return DataSign签名
 */
function encrypt($data, $appkey) {
    return urlencode(base64_encode(md5($data.$appkey)));
}

Tags:

jira 6.3.6 汉化的官方语言包版本

星期六, 十月 17th, 2015 | JAVA-and-J2EE, linux | 没有评论

在网上找对应的汉化包的时候,清一色给的是 JIRA-6.3.3-language-pack-zh_CN.jar,这个jar包

这个在安装的时候使用是可以的,等完成后运行一段时间 发现此插件过期,无法使用又退回到英文版本.

无奈之下看了想看下此插件包的对应的开发步骤时候,无意中发现 了官方的各个语言版本包可以直接下载

需要对应的语言包可以点击 https://translations.atlassian.com/

对应截图先预览下,可以选择对应版本下载即可
jiralanguage

Tags: ,

TimerTask之spring静态注入

星期三, 七月 1st, 2015 | JAVA-and-J2EE | 没有评论

是用jdk自带的TimerTask做简单任务处理感觉蛮简单;

遇到spring无法注入的情况,具体表现:

@Resource annotation is not supported on static fields

1.第一次启动的时候对应的dao是可以注入进来的

2.中间执行run方法的时候dao则为NULL

解决 再引入一个静态初始化的时候转换即可:

 
@Resource
private BookDao bookDao;
 
private static BookDao bkDao;
 
public void start() {
    bkDao= this.bookDao;
    if (!start) {
	VisitStatServiceUtil daemon = new VisitStatServiceUtil();
	click_timer = new Timer("VisitStatServiceUtil", true);
	click_timer.schedule(daemon, INTERVAL, INTERVAL);// 运行间隔1分钟
	start = true;
    }
   log.info("VisitStatService started.");
}

注:在用xml配置的时候 可以通过get set 启用生效;(在项目去 DAO和Service的xml配置文件引发的一系列问题,逐个击破,达到切换到注解模式下)

Tags: , ,

阿里云香港主机恢复小记

星期日, 六月 21st, 2015 | JAVA-and-J2EE, linux | 没有评论

阿里云香港主机服务停止了算是有一天的时间,具体什么时候开始的就不清楚了

只知道大概下午2点左右的时候收到的短信通知,一直到晚上23点的时候才真正恢复

服务器才可以登录,具体服务的影响还要去启动服务器,我以前做了自动启动但还是有影响

其中的软链接 失效了,记录下

对应的启动信息:

1.error while loading shared libraries:libmysqlclient.so.18
重新做下软链接
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64
› Continue reading

Tags:

大型在线阅读网站的技术拆迁

星期日, 六月 21st, 2015 | JAVA-and-J2EE, 读书 | 一条评论

在原有的系统上抽离出新新的系统,重新设计能避免原来系统的种种问题,事实上哪有那多的重新演化,推倒重来也会遇到各种问题;

逐步迭代,逐步更新更来的实际废话不多了,想在线看书可以移步这里 爱阅读

遇到的问题(要分表分库无规律可循):
1.在线阅读书籍的数量越来越多,章节单表存储遭遇上限(记录几百万查询速度变慢)

2.章节的id是UUID 没有按照书籍信息进行编码拆分,即无法和书籍关联起来

解决方法:
1.设计和书籍绑定id,此问题不存在,直接分表分库
2.既然原来的不能动,那就加中间层,来次中间rehash 重新转换,完全解耦
以前的开发模式和流程完全不变,只需要中间层拆分数据层即可

小结:中间层的增加,直观上直接增加了程序的执行时间,但是可以支持无限扩展模式;

遇到问题解决问题才是王道,让合适的事情在合适的地方去拆解,没有那么多重新设计和开发

在看开源的代码、系统架构和其他别人的系统的时候,多去想想为什么,有时候看似有点多余的设计,也是有实际情况的限制

在软件行业快速发展的今天,貌似我们遇到的问题,90%都已经被别人遇到,没有那么多不可能,多的是自己实力不到

10%的问题的解决方案你能遇到并解决之,岂不快哉,探索的世界永远值得探索,保持对未知事情的兴趣.

java捕获kill信号来处理程序信息

星期五, 五月 29th, 2015 | JAVA-and-J2EE, linux | 一条评论

在c中常要控制对应的信号信息,在java中也可以实现简单的信号捕获;
可以作为程序的关闭时候清理数据做参考,
程序如下:
› Continue reading

Tags: ,

双hash减少用户名冲突JAVA版

星期五, 五月 8th, 2015 | JAVA-and-J2EE, 游戏开发 | 没有评论

游戏中要去校验用户名是否重复,redis中放中文的key貌似蛮怪的吧,还是hash后放数字吧,从而校验是否冲突;

hash冲突 例如“Af”和“BG”哈希值相同,则有“AfAf”,“AfBG”,“BGAf”,“BGBG”的哈希值也相同

具体关于java的Hash冲突攻击 可以参考此文章:http://keary.cn/?p=845

不废话了,实际双hash用途很多,还有就是java中的自带hash会出现负数比如 (-8%3) 就为-2 依赖取模后的值就会出问题;

上代码:
› Continue reading

Tags: ,

Lucene查询速度慢的简单优化

星期一, 四月 27th, 2015 | JAVA-and-J2EE | 没有评论

算不上比较高深的优化,只是增加了内存就效果明显,表现原因

1.数据量在100W,索引的文件大小90M,算是比较小的了,查询下来需要1000ms
让我很是不解,在本地测试的时候都未出现此情况,只有第一次初始查询出现超过1000ms,
无法接受的速度

2.查看内存使用情况,发现可用内存太少所致,每次都要重新缓存索引,gc内存,(我压榨了阿里云的最大使用率),升级内存,重启OK,速度终于在10ms

3.使用了FSDirectory,使用RAMDirectory效果不明显,而且占用不少内存(实在没有必要)

小结:服务器的性能还没有本地开发机性能好的时候,只有尽快优化了,既要降低cpu的使用率,又不能大量占用内存,真是愁啥人啊

Tags: ,

Search

文章分类

Links

Meta