数据库
默认是在讲 MySQL 数据库,除非文档特殊说明。
编码格式统一用 utf8mb4
只有 utf8mb4 才能能支持 emoji 表情等等
标准的 UTF-8 字符集编码是可以用 1~4 个字节去编码21位字符,是一种变长的编码格式,这几乎包含了是世界上所有能看见的语言了。然而在MySQL里实现的utf8最长使用3个字节,节省空间但不能表达全部的UTF-8,只支持到了 Unicode 中的“基本多文种平面”(U+0000至U+FFFF,Basic Multilingual Plane,BMP),包含了控制符、拉丁文,中、日、韩等绝大多数国际字符,但并不是所有,最常见的就算现在手机端常用的表情字符 emoji和一些不常用的汉字,如 “墅” ,这些需要四个字节才能编码出来。 MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4,使用4个字节来表示完整的UTF-8。简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符。
创建数据库
# /tmp/create-database.sh
database_name='xxx'
sudo mysql << EOF
DROP DATABASE IF EXISTS ${database_name};
CREATE DATABASE ${database_name} CHARSET=utf8mb4;
exit
EOF
注意 exit 后面不要加分号 ; 因它是 MySQL 客户端的命令,并非 SQL 语句。
执行脚本:sudo bash /tmp/create-database.sh
创建用户(指定数据库权限)
database_name='xxx'
user_name='xxx'
user_password='xxx'
sudo mysql << EOF
DROP USER IF EXISTS ${user_name};
CREATE USER ${user_name}@'%' IDENTIFIED BY '${user_password}';
GRANT all privileges ON ${database_name}.* TO '${user_name}'@'%';
exit
EOF
注意:MySQL 8 的用户密码要加 IDENTIFIED WITH mysql_native_password BY '密码' 否则在某些 mysql 客户端发起数据库连接时,会引起报错。
例如 nodejs 的 mysql 库会报错:
Client does not support authentication protocol requested by server; consider upgrading MySQL client