查看字符集
查看服务器字符集
|
|
查看数据库字符集
|
|
查看表的字符集
|
|
查看字段(列)字符集
|
|
修改字符集
修改数据库默认字符集
|
|
修改表默认字符集
|
|
修改表默认字符集,同时转换有关字段字符集
|
|
修改字段(列)字符集:
|
|
查看服务器字符集
|
|
查看数据库字符集
|
|
查看表的字符集
|
|
查看字段(列)字符集
|
|
修改数据库默认字符集
|
|
修改表默认字符集
|
|
修改表默认字符集,同时转换有关字段字符集
|
|
修改字段(列)字符集:
|
|
由于项目的需要近日升级了 MySQL 5.5,顺便也把 Gitlab 升级到了 6.7。结果今天在应用服务器上 git pull
的时候出现错误:
|
|
于是尝试了一下 git clone
,也还是有错误:
|
|
因为在我自己的电脑上 git 操作一切正常,而两个环境主要的区别就是连接 git 服务的协议,我的机器上用基于 ssh
的 git
协议,而应用服务器上通过 http
协议访问服务。所以问题肯定是和 http
协议有关,于是开始查看 gitlab 的日志,但是看不出有什么问题,查看 Nginx 的日志也没有任何错误。
最后,经过一番搜索,找到了这个Issue。
看来是和这个代码有关系。在这个代码里面,对原来直接返回的 block
内容用 encode_chunk
方法重新进行了封装,在原来的 block
前添加了一行块大小信息。
由于我现在的 Nginx 是 1.0 的版本,这个版本默认是没有包含 chunking module 的,所以无法正确处理 chunked response,看来只要按大家说的升级 Nginx 就可以了。
我之前是直接通过 yum install
安装的 Nginx,而默认的 yum
封包库里只有 Nginx 1.0,所以我添加了 Webtatic 的封包库,然后卸载 Nginx 1.0,安装 Nginx 1.4。
|
|
整个升级过程非常快,我事先还备份了 /etc/nginx
,但是升级后发现配置文件都还在,而且启动 Nginx 1.4 十分顺利。再尝试 git pull
,果然OK了!
用 Rails3 做移动端 App 的 Backend 时,出现一种情况,当移动端使用中国移动的网络时(中国联通无此状况),发送到服务端的 HTTP 请求的 Header 中的 Accept 莫名其妙的的被加上了 */*
。而本来客户端只给 Accept 赋值了 application/json
,现在就变成了 application/json, */*
。Rails 在接收到这种请求时,request 的 format 就会识别为 text/html
,导致 controller 最终返回给客户端的是 html 格式的应答。
为什么会被添加 */*
就不做深究了,网络运营商对数据的传输做了哪些处理策略不得而知,就算知道了也无能为力。于是考虑从服务端着手想办法解决。
之前为了发现为什么 Rails 返回的是 html 格式的应答时添加了一些 debug 日志,来观察客户端有没有正确的设置 HTTP Header。
app/controllers/application_controller.rb
|
|
正是根据这些日志发现了被添加的 */*
,而且发现只有这一种情况会导致返回 html 应答,所以就针对这种情况做一下处理。
在 application_controller.rb 中添加如下代码:
|
|
采用这种方式修改了 request.formats 的值,于是终于可以正确返回 json 格式的应答了。
可是为什么 Rails 不按照 Accept 的值的顺序优先采用 application/json
指定的格式呢?
所有的操作系统都提供了各自的机制可以设置环境变量,所有的 Unix 和 类Unix 系统中的每个进程都有各自的环境变量设置,很多 PaaS 的开发者平台(比如Heroku)也提供了配置环境变量的机制。我的理解是,环境变量就是可以在不同环境中单独配置(对环境有依赖),可以让进程在运行时加载并使用,一些底层的基础变量。常见的环境变量比如:PATH、HOME 等等。
主要有两方面原因,
Ruby 提供了一个很方便的访问环境变量的方式:
|
|
比如要在一个 Rails 应用中配置一个 Gmail 账号来发邮件:
|
|
这个配置对 Rails 开发者肯定不陌生,这里就是使用环境变量对 Gmail 的用户名和密码进行了保护。
配置环境变量对大多数人来说也并不陌生,比如 Windows 系统属性设置里面就可以找到配置环境变量的按钮,在 Linux/Unix/Mac 之类的操作系统中可以通过配置 .bashrc 或者 .zshrc (根据使用shell来定)之类文件来设置。
比如在 ~/.bashrc 中加入下面内容:
|
|
假设有一个文本文件,里面有很多行文本,我现在想要把所有文本合并为一行。
这不是很简单嘛!
只要 gg
先移动到首行,再 VG
(用vG
也可)选中所有行,然后用 J
合并所有行不就OK了么?
按上面的操作的确是合并成了一行,可是在原来每两行的连接处都会被添加一个空格,这不是我想要的。
要把所有文本合并为一行且中间不添加空格,该怎么做?
其实也很简单,在 J
之前再多敲一个 g
就可以了,连续的操作就是 ggVGgJ
。
那要是不合并全部文本,只合并一段(paragraph)文本,该怎么做?
可以这样操作 vipgJ
,也就是在visual模式下选中段落然后 gJ
。
以此类推,基本的方法就是在visual模式下选中要合并的部分 gJ
一下就好。
查阅了很多资料,没有一个能明确告诉你用哪个更好,抛开两者一部分技术上的不同优势,整理了几点区别如下,
MySQL诞生于1994年,支持多种存储引擎,常见的有 MyISAM 和 InnoDB,前者实现了高速读但不支持ACID,后者实现了ACID。MySQL在所有权归于Oracle之后,提供了多个版本,其中有免费的也有收费的。
PostgreSQL诞生于1985年,以稳定著称,可靠性、数据一致性与完整性是PostgreSQL的最高优先级特性,完全支持ACID,它只提供单个完整功能的版本。
MySQL在国内更为流行,一个很大的原因在于PostgreSQL在早期不提供Windows版本。
MySQL能够进行快速的读取和大量的查询操作,不过在复杂特性与数据完整性检查方面不太尽如人意。MyISAM引擎是最快的,因为它只执行很少的数据完整性检查,适合于后端读操作较多的站点,不过对于包含敏感数据的读/写数据库来说就是个灾难了,因为MyISAM表最终可能会损坏。
PostgreSQL的可靠性好,在保护数据方面很擅长,而且是个社区项目,不会陷入厂商的牢笼之中。MySQL更加灵活,提供了更多选项来针对不同的任务进行裁剪。
一个常见的误解就是MySQL要比PostgreSQL更容易学习。关系数据库系统都是非常复杂的,这两个数据库的学习曲线其实是差不多的。
PostgreSQL与Oracle数据库很相似,同为多进程框架,所以能支持高并发的应用场景,所以熟悉Oracle的话转到PostgreSQL数据库上是比较容易的。
MySQL从5.5版本开始性能提升很大,单机性能强于PostgreSQL。
Spring 内置了对 web 应用 multipart(文件上传) 的支持,即通过可拔插的 MultipartResolver 对象实现对 multipart 的处理。该对象定义在 org.springframework.web.multipart
包内,它是按照 RFC 1867 设计的一个策略接口,自 Spring 2.5 开始,Sping 内包含了一个它的具体实现类,即 org.springframework.web.multipart.commons.CommonsMultipartResolver,该实现类是建立在 Jakarta Commons FileUpload 基础上的,因此在使用时需要引入对 ‘commons-fileupload.jar’ 的依赖。
默认情况下,Spring 是不对 multipart 进行处理的,你可以在你的 web 应用上下文配置中添加一个 MultipartResolver 的实现来启用对 multipart 的支持,这样容器就会对每个请求进行检查,如果发现请求包含了 multipart 数据,就会使用配置的 MultipartResolver 实现来对请求进行处理。
下面例子演示了如何使用 Sping 自带的实现类 CommonsMultipartResolver 来启用 multipart 处理,在 Spring 应用上下文中添加如下配置:
|
|
添加了该配置,当 Spring 的 DispatcherServlet 收到包含 multipart 的请求后,配置的 MultipartResolver 就会被调用来处理这类请求,它会将当前的 HttpServletRequest 包装成一个 MultipartHttpServletRequest 来支持 multipart 的处理。从 MultipartHttpServletRequest 中你可以获取到 multipart 的数据内容,从而让你的 Controller 能够直接访问请求中包含的文件。
假设我们创建的表单页面如下:
|
|
我们给 form 标签添加了 enctype 属性,其值为 multipart/form-data
,该属性是用来告知浏览器用什么方法对 multipart 字段内容进行编码。