Mysql字段格式

TIMESTAMP和DATETIME

TIMESTAMP和DATETIME类型非常相似,显示出来都是YYYY-MM-DD hh:mm:ss[.小数]。不同点在于,timestamp保存时是保存的utc时间,获取时,会根据当前会话时区或者系统时区进行转化;DATETIME是一个绝对值,不会随时区变化。另外这两者在表达范围和存储占用也稍有不同。

datetime和timestamp都支持6位小数。

表达范围

TIMESTAMP只能表示’1970-01-01 00:00:01′ UTC 到’2038-01-19 03:14:07′ UTC;DATETIME可以表达的范围是 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’(注意这里没有时区)

Zero Value

当遇到非法的值时,都会转成Zero Value,即 ‘0000-00-00 00:00:00’

SQL语句示例

`ts` TIMESTAMP(6) NULL DEFAULT NULL

以上SQL中(6)表示该字段包含6位小数,即可精确到微秒(10^-6)。

存储差异

type 5.6.4之前 5.6.4以后
DATETIME 8 bytes 5 bytes + 小数部分
TIMESTAMP 4 bytes 4 bytes + 小数部分

小数部分存储:

小数长度 存储
0 0 bytes
1, 2 1 byte
3, 4 2 bytes
5, 6 3 bytes

因此在 MySQL5.6.4以后,DATETIME最少占5个字节,最多占8个字节;TIMESTAMP最少占4个字节,最多占7个字节。

参考资料

  1. https://stackoverflow.com/questions/2012589/php-mysql-year-2038-bug-what-is-it-how-to-solve-it
  2. https://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html

INT类型

INT(11) 和 INT(3) 没有任何区别,在存储上都占 4 bytes,只有当指定ZEROFILL时,才会体现出稍微的显示上的区别出来:

`id` INT(11) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT

以上语句指定了ZEROFILL,当保存一个文本长度不足11位的数字时,将会在数字前补充0,比如235,文本长度是3,因此追加8个0,显示出来时是00000000235。

navicate等GUI工具可能会把这些0去掉,导致没有显示差异。

即使指定了ZEROFILL,但不影响数字的存储,以及它们的计算,仅仅是显示上有差异而已。

做了一个极简的让wordpress支持markdown的插件,支持代码高亮

用过一些markdown的插件,要么就是用起来麻烦,要么就是写作体验差,于是只能手动撸一个了,安装后,写作时使用那个文本编辑器,直接写markdown的语法即可。

代码以及使用方法: https://github.com/yeskn-studio/markdown-one

编译安装php7.3

下载源码

cd ~ && wget http://cn2.php.net/distributions/php-7.3.0.tar.bz2

安装依赖

yum install -y bzip2 libxml2-devel libicu-devel gcc-c++

解压配置安装

tar -jxvf php-7.3.0.tar.bz2
cd php-7.3.0
./configure --prefix=/usr/local/php@7.3 --with-config-file-path=/etc/php@7.3 --enable-fpm --with-fpm-user=apache --with-fpm-group=apache --enable-intl --enable-mbstring --enable-pcntl --enable-sockets --enable-zip --enable-mysqlnd

# 我的web用户是apache,因此fpm用户指给了apache

提示:

error: Please reinstall the libzip distribution

尝试yum安装,但是yum版本过低,转为编译安装。

安装libzip

cd ~ && wget https://libzip.org/download/libzip-1.5.1.tar.xz
xz -d libzip-1.5.1.tar.xz
tar -xvf libzip-1.5.1.tar
cd libzip-1.5.1
mkdir build
cd build && cmake ..

提示cmake版本过低

安装cmake

cd ~ && yum remove cmake -y
wget https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz
tar xvf cmake-3.6.2.tar.gz && cd cmake-3.6.2/
./bootstrap
gmake && gmake install
ln -s /usr/local/bin/cmake /usr/bin/
cmake --version

继续编译libzip

cd ~/libzip-1.5.1/build
cmake .. && make && make install

继续编译php

cd ~/php-7.3.0
./configure --prefix=/usr/local/php@7.3 --with-config-file-path=/etc/php@7.3 --enable-fpm --with-fpm-user=apache --with-fpm-group=apache --enable-intl --enable-mbstring --enable-pcntl --enable-sockets --enable-zip --enable-mysqlnd

提示:

error: off_t undefined; check your library configuration

根据https://segmentfault.com/q/1010000007346459

# 添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf

# 更新配置

ldconfig -v

继续

./configure --prefix=/usr/local/php@7.3 --with-config-file-path=/etc/php@7.3 --enable-fpm --with-fpm-user=_www --with-fpm-group=_www --enable-intl --enable-mbstring --enable-pcntl --enable-sockets --enable-zip --enable-mysqlnd

成功了,make it!

make && make install

测试时,在另外一个1G服务器上提示内存不足,创建swap分区临时解决:

mkdir /var/swap
dd if=/dev/zero of=/var/swap/swap_1G bs=2048 count=524288
chmod 0600 /var/swap/swap_1G
mkswap /var/swap/swap_1G
swapon /var/swap/swap_1G
echo "/var/swap/swap_1G swap swap default 0 0" >> /etc/fstab

# 检查
free --si -h

# 继续make
make && make install

后续操作

/usr/local/php@7.3/bin/php --version
/usr/local/php@7.3/bin/php --ini

# 此目录没有自动创建,创建它
mkdir /etc/php@7.3/php.ini

cp php.ini-production /etc/php@7.3/php.ini

#修改时区
sed -i 's/^;date.timezone =$/date.timezone = Asia\/Shanghai/g' /etc/php@7.3/php.ini

# 配置fpm
cp /usr/local/php@7.3/etc/php-fpm.conf.default /etc/php@7.3/php-fpm.conf
cp -r /usr/local/php@7.3/etc/php-fpm.d/ /etc/php@7.3
mv /etc/php@7.3/php-fpm.d/www.conf.default /etc/php@7.3/php-fpm.d/www.conf

sed -i 's#^include.*#include=/etc/php@7.3/php-fpm.d/*.conf#g' /etc/php@7.3/php-fpm.conf
#或手动修改/etc/php@7.3/php-fpm.conf最后的include行为:include = /etc/php@7.3/php-fpm.d/*.conf

mkdir -p /var/php@7.3/run
sudo chown -R apache /var/php@7.3

mkdir /var/php@7.3/run -p
sed -i 's#^pid =.*#pid = /var/php@7.3/run/php-fpm.pid#g' /etc/php@7.3/php-fpm.conf
#或手动修改/etc/php@7.3/php-fpm.conf中pid文件设置:pid = /var/php@7.3/run/php-fpm.pid

# 启动fpm(如果你的9000端口被占用了可能还需要修改端口)
/usr/local/php@7.3/sbin/php-fpm -y /etc/php@7.3/php-fpm.conf

# 重启fpm
kill -USR2 `cat /var/php@7.3/run/php-fpm.pid`

# 停止fpm
kill -INT `cat /var/php@7.3/run/php-fpm.pid`