在服务器上创建MySQL数据库,核心命令是CREATE DATABASE,但必须结合字符集、排序规则和用户授权,才能构建一个可用的线上数据库环境。
mysql创建数据库命令详解
基础语法与常用参数
CREATE DATABASE是MySQL中最基础的DDL语句,但很多人在使用时会忽略参数,导致后期出现乱码或权限问题。
CREATE DATABASE 数据库名;
这条命令会使用MySQL默认的字符集和排序规则,通常是latin1_swedish_ci,对于中文应用,这显然不够,所以实际使用中,我们几乎总是加上字符集和排序规则。
CREATE DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
行业共识认为,utf8mb4是目前最稳妥的字符集,它兼容所有Unicode字符,包括emoji。utf8mb4_unicode_ci则是基于Unicode的排序规则,比较准确。
生产环境推荐写法
在脚本或自动化部署中,为了避免重复创建报错,建议加上IF NOT EXISTS:
CREATE DATABASE IF NOT EXISTS 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 不要使用
CREATE DATABASE不加参数,除非你确认默认字符集符合业务 - 字符集和排序规则一旦确定,后期修改成本较高,需提前规划
服务器上mysql创建数据库步骤
连接MySQL服务器
假设你已通过SSH登录到服务器,MySQL服务正常运行,连接数据库的命令:
mysql -u root -p
输入密码后进入MySQL交互环境,如果使用云服务器,可能还需要指定主机地址和端口,
mysql -h 内网IP -u root -p -P 3306
执行创建数据库命令
进入MySQL后,执行:
CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
执行成功后,用SHOW DATABASES;确认是否出现。
创建用户并授权
数据库创建完成,但还需要一个用户来操作它,授权语句:
GRANT ALL PRIVILEGES ON myapp. TO 'myuser'@'localhost' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;
myapp.表示该数据库下的所有表'localhost'表示只能从本机连接,如果应用在其他服务器,改为或具体IP
验证数据库
切换到新数据库并创建一张测试表,确认一切正常:
USE myapp; CREATE TABLE test (id INT); SHOW TABLES;
mysql创建数据库指定字符集与排序规则
字符集选择分析
字符集决定数据存储的编码方式,选错会直接导致写入数据乱码,MySQL支持的字符集很多,但常用的只有几种:
| 字符集 | 覆盖范围 | 适用场景 |
|---|---|---|
| latin1 | 西欧字符 | 纯英文老系统,几乎淘汰 |
| utf8 | 基本多文种平面(BMP) | 之前的主流,但无法存emoji |
| utf8mb4 | 完整Unicode,包含辅助平面 | 新项目推荐,兼容所有现代文本 |
新项目请直接使用utf8mb4,避免以后迁移,MySQL官方文档也明确推荐utf8mb4作为默认字符集。
排序规则对比
排序规则(collation)影响字符串比较和排序,常见的有:
utf8mb4_unicode_ci:基于Unicode算法,比较准确,性能略低utf8mb4_general_ci:MySQL专有算法,速度稍快,但部分字符排序不准确
多数情况下,utf8mb4_unicode_ci足够,差异可以忽略。
mysql创建数据库并授权操作
授权语句详解
授权不只是GRANT ALL,你可以根据需要分配最小权限:
-- 只读权限 GRANT SELECT ON 数据库名. TO '只读用户'@'主机' IDENTIFIED BY '密码'; -- 读写权限(不含DDL) GRANT SELECT, INSERT, UPDATE, DELETE ON 数据库名. TO '读写用户'@'主机' IDENTIFIED BY '密码';
- 权限范围:
数据库名.表示所有表,也可以指定数据库名.表名 - 主机:
localhost、、168.1.%等
常见权限设置
对于线上环境,尽量避免使用ALL PRIVILEGES给普通应用,建议只给DML权限(增删改查),结构变更(CREATE TABLE等)由DBA通过其他账户操作。
执行授权后,务必运行FLUSH PRIVILEGES;,否则新权限不会立即生效。
linux服务器mysql创建数据库实操
环境准备
一台Linux服务器,已安装MySQL并启动,检查MySQL服务状态:
systemctl status mysqld
如果未启动,先启动并设置开机自启:
systemctl start mysqld systemctl enable mysqld
命令行操作示例
以下是一个完整的创建数据库和用户的过程,假设数据库名为blog,用户名为bloguser,密码为SecurePass123。
- 登录MySQL:
mysql -u root -p - 创建数据库:
CREATE DATABASE blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 创建用户:
CREATE USER 'bloguser'@'localhost' IDENTIFIED BY 'SecurePass123'; - 授权:
GRANT ALL PRIVILEGES ON blog. TO 'bloguser'@'localhost'; - 刷新:
FLUSH PRIVILEGES; - 退出:
EXIT
如果应用部署在另一台服务器,需要将localhost改为应用服务器的IP,或者在云服务器安全组中放行3306端口。
常见问题与解决
权限不足
执行CREATE DATABASE时提示ERROR 1044 (42000),说明当前用户没有创建数据库的权限,使用root账户或具有CREATE权限的账户操作。
字符集不匹配
ERROR 1115 (42000): Unknown character set表示指定的字符集不存在,检查MySQL支持的字符集:
SHOW CHARACTER SET;
确认后选择可用的字符集,比如utf8mb4几乎在所有MySQL 5.5.3以上版本都支持。
连接问题
创建数据库后,远程连接不上,可能原因:
- MySQL用户主机限制为
localhost,需要改为或具体IP - 服务器防火墙或云安全组未放行3306端口
- MySQL绑定地址默认是
0.0.1,需修改/etc/mysql/my.cnf中的bind-address为0.0.0,然后重启服务
在服务器上创建MySQL数据库,掌握CREATE DATABASE、字符集选择和授权命令,就能快速搭建数据存储环境,关键在于根据业务场景设置正确的字符集和权限,避免后续返工。
Q&A
mysql创建数据库命令是什么?
基本命令是CREATE DATABASE,常用完整写法为CREATE DATABASE IF NOT EXISTS 库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;。
mysql创建数据库指定字符集怎么做?
在创建命令后添加CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,其中utf8mb4是当前最推荐的字符集,支持完整Unicode,如果使用其他字符集,需先确认MySQL支持。
云服务器mysql创建数据库时要注意什么?
云服务器自建MySQL时,需在安全组放开3306端口,并确保绑定地址允许外部连接,创建数据库和授权命令与本地一致,但用户主机需改为应用服务器IP或,如果使用云数据库服务,则通过控制台操作,但底层SQL逻辑相同。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/512746.html



