#338 MySQL 数据类型总结
DB MySQL 2019-08-25数值
-
bit[1 - 64] -
tinyint1 smallint2mediumint3int4-
bigint8 -
float4 浮点(单精度) double8 浮点(双精度)decimal(m, d)max(m, d) + 2 定点
别名 Synonyms:
integer->intbool/boolean->tinyint(1)dec/numeric/fixed->decimaldouble precision/real->double
PS: 如果开启 REAL_AS_FLOAT 模式,REAL 就变成了 FLOAT 的别名。
字符串/文本
char-
varchar -
tinytext textmediumtext-
longtext -
JSONMySQL 5.7 加入
二进制
binary-
varbinary -
tinyblob blobmediumbloblongblob
时间
| 类型 | 长度 | 备注 |
|---|---|---|
year |
1 | 四位数:1901 ~ 2155 两位数:00 ~ 69 (2000 ~ 2069) 70 ~ 99 (1970 ~ 1999) |
date |
3 | 1000-01-01 ~ 9999-12-31 |
time |
3 | -838:59:59.999999 ~ 838:59:59.999999 即:-34d23h ~ 34d23h |
datetime |
8 | 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 |
timestamp |
4 | 1970-01-01 00:00:00 ~ 2038-01-19 11:14:07 |
- 用字符串(
varchar)表示时间,除了失去数据库这一层的数据类型保证之外,还会在时间比较运算场景下,失去索引命中可能。 - 用整型数
bigint(8 字节)表示时间,可以扩大timestamp时间范围,但要自己维护数据(其实还是比较好维护的)。 - 带时区的时间:
timestamp - 带精度的时间:
time、datetime、timestamp,精度最大为 6,表示毫秒。比如:timestamp(6)
其他
enumset- Geometry 系列
货币
- 以分为单位
Integer Decimal,不要用float,double
参考资料与拓展阅读
#337 PowerShell 在 Ubuntu 下的安装和试用
Linux PowerShell 开发工具 2019-08-22PowerShell 的最近的一次更新修复了其作为 SSH 的登录 Shell 的一些问题。
Win 10 对 NFS,SSH 的支持推进也是有目共睹。
随着 MS 对 Windows 的策略调整,估计以后 Windows 服务器也会变多。
- https://docs.microsoft.com/zh-cn/powershell/scripting/install/installing-powershell-core-on-linux
- https://docs.microsoft.com/zh-cn/powershell/scripting/overview
# Download the Microsoft repository GPG keys
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
# Update the list of products
sudo apt-get update
# Enable the "universe" repositories
sudo add-apt-repository universe
# Install PowerShell
sudo apt-get install -y powershell
# Start PowerShell
pwsh
PS 常用命令
# 获取本地 IP
(invoke-webrequest -uri "http://ifconfig.me/ip").content
get-nettcpconnection | where-object {$_.State -eq "Listen"}
get-nettcpconnection -localport 49667
get-process -id (get-nettcpconnection -localport 49667).owningprocess
stop-process -id (get-nettcpconnection -localport 11).owningprocess
"# README" | out-file README.md
type README.md
#336 Shell 编程备忘录
Linux Shell 2019-08-21PS: Shell 编程时总是不能区分什么是 Shell 语法,什么是系统命令。
基础
x=abc
echo hello world
echo 'Just output $x'
echo "The value of x: $x"
echo ${x:?变量未设置}
echo ${x:+变量已设置}
echo ${x:-默认值}
变量
Shell 就是标准的弱类型,所有的数据都是按照字符串的形式存储,然后根据上下文决定如何处理。
x='hello world' # 等于号两边不能有空格
local x='hello world' # 本地作用域,函数体中使用
echo $a
echo ${a}
unset a
readonly a # 将变量设置成只读,不能修改,不能 unset
readonly b=1
# 没有提供方法取消 readonly 属性,但是我看到 SO 上有提供非常规方法来做这件事情
字符串变量
单引号不支持变量和转义(也就是说字符串中不能出现单引号)!
x="hello world"
echo $x
echo ${#x}
echo ${x/world/markjour} # 字符串替换
# 子字符串/字符串切片
echo ${x::5} # hello
echo ${x:7:8} # world
echo ${x::4} # hell
echo ${x::-4} # hello w
特殊变量
$0
$1
...
$n
# 所有参数
$*
$@
$# # 参数个数
$$ # 进程号
$! # 后台进程号
$? # 上一个命令的退出状态
$- # himBHs 当前 Shell 的选项
数组
arr=(zhao qian sun li)
arr[4]=zhou
arr[5]=wu
arr[6]=zheng
arr[7]=wang
echo ${arr[0]} # zhao
echo ${arr[@]} # zhao qian sun li zhao wu zheng wang
# 获取数组元素个数
echo ${#arr} # 4 定义时的长度,后来新加的不算,也就是说这个值定义变量的时候就定了
echo ${#arr[@]} # 8
条件
if condition:
then
:
else:
:
fi
[ ][[ ]]test
循环
for var in list:
do
:
done
数学计算
test
逻辑
数学比较
字符串比较
文件相关
bcdfgkpurwxse
白菜豆腐干,靠谱如我,羞涩
最常用的:
-e检查路径是否存在-d检查是否为目录-f检查是否为文件-r检查文件是否可读-w检查文件是否可写-x检查文件是否可执行-s检查文件是否为空
参考资料与拓展阅读
- StackOverflow, Unset readonly variable in bash
- How To Unix For Loop 1 to 100 Numbers
- Linux Handbook, Bash Beginner Series #4: Using Arrays in Bash
- StackOverflow, Questions tagged [bash]
#335 Requests 的日志配置
requests logging 2019-08-09import http.client
import logging
import requests
LOG_LEVEL = logging.DEBUG
LOG_FORMAT = '%(asctime)s [%(thread)s] [%(name)s:%(funcName)s#%(lineno)d] %(levelname)s %(message)s'
logging.basicConfig(level=LOG_LEVEL, format=LOG_FORMAT)
LOG_HTTP = logging.getLogger("http.client")
def httpclient_log(*args):
LOG_HTTP.log(logging.DEBUG, " ".join(args))
http.client.print = httpclient_log
http.client.HTTPConnection.debuglevel = 1
#334 获取文件添加到 git 的时间
开发工具 Git 2019-08-01git log --diff-filter=A --follow --format="%h %ad %ce" -1 -- requirements.txt | cat
# 6a0eebf 2019-05-22 19-47-09 bobo@example.com
#333 DNS 基础
DNS 2019-07-22域名
Class rdataclass
RESERVED0 = 0
IN = 1
INTERNET = 1
CH = 3
CHAOS = 3
HESIOD = 4
HS = 4
NONE = 254
ANY = 255
Type rdatatype
AIPv4 AddressAAAAIPv4 AddressCNAMECanonical Name,“规范名称”,其实就是别名,指向另一个域名。MX 记录和 NS 记录不能指向一个 CNAME 记录。NSName Server,权威 DNS 服务器位置。MXMail Exchange,邮件服务位置。SRV通用的服务类型记录,取代 MX 这种专用记录。
_xmpp-client._tcp.example.net. 86400 IN SRV 5 0 5222 example.net.
_xmpp-server._tcp.example.net. 86400 IN SRV 5 0 5269 example.net.
# TTL Priority Weight Port
TXTSOAStart Of Authority,权威记录起始PTR反解记录
反解记录
记录名称:IP 翻转过来,加上 .in-addr.arpa 后缀
记录类型:PTR
dig -x 106.75.80.125
dig +noall +answer -tPTR 125.80.75.106.in-addr.arpa
完整的 DNS 解析过程
- 找到权威服务器
Windows
nslookup
ipconfig /displaydns
ipconfig /flushdns
Linux
dig markjour.com A
dig @8.8.8.8 markjour.com
dig qq.com MX
dig MX qq.com
dig -t MX qq.com
dig +noall +answer qq.com
dig +short qq.com
dig qq.com ANY
dig +trace +nssearch markjour.com
DNS 请求和响应
- header 2Bytes
| Field | Bits | Desc |
|---|---|---|
| QR | 1 | query 0, reply 1 |
| OPCODE | 4 | QUERY 0, IQUERY 1, STATUS 2 |
| AA | 1 | Authoritative Answer |
| TC | 1 | TrunCation |
| RD | 1 | Recursion Desired |
| RA | 1 | Recursion Available |
| Z | 3 | Zero 填零,保留 |
| RCODE | 4 | Response Code |
RCODE:
- NOERROR (0)
- FORMERR (1, Format error)
- SERVFAIL (2)
-
NXDOMAIN (3, Nonexistent domain)
-
body
-
question
Field Bits Desc NAME 可变 资源名称 TYPE 2 记录类型 CLASS 2 Class Code CLASS Code
rdata.class:RESERVED0 = 0 IN = 1 INTERNET = 1 CH = 3 CHAOS = 3 HESIOD = 4 HS = 4 NONE = 254 ANY = 255 -
answer
- authority
- additional space
请求
响应
参考资料与拓展阅读
- 维基百科(en), Domain Name System
- 维基百科(en), List of DNS record types
- XMPP, SRV Records
- Julia Evans, How to find a domain's authoritative nameservers
- CloudFlare, 什么是 DNS?
#332 LaTeX
开发者 LaTeX 2019-07-21TeX
/tɛx/
TeX 是计算机科学领域传奇人物高德纳教授 1978 年在完成《计算机程序设计艺术》(The Art of Computer Programming)一书时顺手开发出来,理由是当时的计算机排版技术会影响这本书的印刷质量。而且,与 TeX 一同发明出来的还有一种用于定义矢量字体的编程语言 Metafont,不过这种语言并没有被广泛使用,毕竟字体开发者多半是做美术设计的人,应该在理解编程方面有很大的障碍。
TeX 是很多领域的出版物排版领域都是事实标准,这个名字可以指相关排版系统,也可以指那套排版系统所使用的语法。
TeX 是一个共有领域项目,鼓励别个自己改进完善这个项目。而且其项目管理特别有意思,规定 3.0 做功能冻结,之后按照 π 的小数位来版本更新,只做 BUG 修复,在作者(高德纳)死之后,版本修改为 π,然后剩下的错误修复都当作是新功能来提交。
最知名的 TeX 发行版:TeX Live,它由 TeX User Group 发布,是目前大多数 Unix-like 机器上默认的 TeX 版本。Tex 引擎作为其核心(可以认为是现在的官方版本吧),另外还包含必要字体和相关工具(最重要的是 TeX 编辑器),可能还有一些重要拓展,比如 XeTeX(Unicode 和现代字体技术支持)、LuaTeX(内置 Lua 支持) 等。
其他:
- TeX 输出设备无关的 DVI 文件,用来显示和打印都行。
- 老爷子还设计了 Plain TeX 对 TeX 进行一种封装,或者说一组宏集。
LaTex
/ˈlɑːtɛx/
LaTeX 算是 TeX 的派生软件,使用 TeX 作为排版引擎,当前的版本是LaTeX2e。
我的理解:LaTex 是在 TeX 上面附加了一组宏集,进一步屏蔽了 TeX 层的复杂性,简化了 TeX 的使用。
由于 TeX 可以认为是领域编程(DSL),而这个库里面有各种预订的规则,然后基于这些预设规则,我们可以很容易完成排版,比如有一个包描述了象棋棋谱相关规则,我们就可以通过简单的几句描述一个棋盘。
其内容与样式分离的设计思路有点类似 HTML + CSS,或者说 XML + XSL,通过命名空间定义一组标签,然后 XML 使用这组标签写文档,最后 XSL 上来渲染。LaTeX 完成了很多领域命名标签的定义,然后还有预定义的各种样式,基本上只需要采用相关语法写自己的文档就行。
常用语法




参考资料与拓展阅读
#331 Facebook 数字货币项目 Libra 的国会听证会
开发者 2019-07-16今天的听证会上,小扎声明:
- 在获批之前,不会继续推动项目;
- 上线之后一定会配合监管,确保不被用于洗钱和恐怖主义融资。
有意思的是,他特意提到中国,表示如果一再受阻,中国央行会抢在他们前面有所动作(可能是说推出数字货币)。
值得注意的是,Libra 项目的几个重要合作者,包括 eBay、PayPal、Stripe、Visa、MasterCard,已经退出了。
#330 美国国会叫停 Facebook 数字货币项目
开发者 2019-07-03目前 Facebook 已经联合了万事达、Visa、PayPal、Uber、Lyft、Spotify 等在内的共 28 家公司,组建总部位于瑞士 Libra 合作组织(数字货币 Libra / 数字钱包 Calibra)。
- 通过去中心化的、可编程的数据库来支持小波动的加密货币(稳定币)
- Libra 核心代码托管在 GitHub,采用 Apache-2.0 开源许可证
美国众议院财政服务委员担忧此项目会导致新全球金融体系的建立,对美国货币政策产生干扰,甚至影响美元地位,故而向扎克伯格等 Facebook 高管致函,要求其立即停止该项目所有工作。