MySQL 字符集相关

查看字符集

查看服务器字符集

1
SHOW VARIABLES LIKE '%char%';

查看数据库字符集

1
SHOW CREATE DATABASE db_name;

查看表的字符集

1
2
SHOW CREATE TABLE table_name;
SHOW TABLE STATUS FROM db_name LIKE '%TABLE_NAME%';

查看字段(列)字符集

1
SHOW FULL COLUMNS FROM table_name;

修改字符集

修改数据库默认字符集

1
2
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
ALTER DATABASE my_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

修改表默认字符集

1
2
ALTER TABLE table_name DEFAULT CHARACTER SET character_name [COLLATE...];
ALTER TABLE my_table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

修改表默认字符集,同时转换有关字段字符集

1
2
ALTER TABLE table_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

修改字段(列)字符集:

1
2
ALTER TABLE table_name CHANGE col_name new_col_name CHARACTER SET character_name [COLLATE ...];
ALTER TABLE my_table CHANGE my_column my_column VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

MySQL vs PostgreSQL

查阅了很多资料,没有一个能明确告诉你用哪个更好,抛开两者一部分技术上的不同优势,整理了几点区别如下,

  1. MySQL诞生于1994年,支持多种存储引擎,常见的有 MyISAM 和 InnoDB,前者实现了高速读但不支持ACID,后者实现了ACID。MySQL在所有权归于Oracle之后,提供了多个版本,其中有免费的也有收费的。

  2. PostgreSQL诞生于1985年,以稳定著称,可靠性、数据一致性与完整性是PostgreSQL的最高优先级特性,完全支持ACID,它只提供单个完整功能的版本。

  3. MySQL在国内更为流行,一个很大的原因在于PostgreSQL在早期不提供Windows版本。

  4. MySQL能够进行快速的读取和大量的查询操作,不过在复杂特性与数据完整性检查方面不太尽如人意。MyISAM引擎是最快的,因为它只执行很少的数据完整性检查,适合于后端读操作较多的站点,不过对于包含敏感数据的读/写数据库来说就是个灾难了,因为MyISAM表最终可能会损坏。

  5. PostgreSQL的可靠性好,在保护数据方面很擅长,而且是个社区项目,不会陷入厂商的牢笼之中。MySQL更加灵活,提供了更多选项来针对不同的任务进行裁剪。

  6. 一个常见的误解就是MySQL要比PostgreSQL更容易学习。关系数据库系统都是非常复杂的,这两个数据库的学习曲线其实是差不多的。

  7. PostgreSQL与Oracle数据库很相似,同为多进程框架,所以能支持高并发的应用场景,所以熟悉Oracle的话转到PostgreSQL数据库上是比较容易的。

  8. MySQL从5.5版本开始性能提升很大,单机性能强于PostgreSQL。

想多了解一点可以看看 http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL

修改 MySQL 的 root 密码

使用 mysqladmin 命令

  1. root 尚未设置过密码的情况
1
mysqladmin -u root password "newpassword"
  1. root 已经设置过密码的情况
1
mysqladmin -u root password oldpassword "newpassword"

使用 MySQL 内的 set password 命令

1
2
3
mysql -u root -p
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');

直接修改 user 表数据

1
2
3
4
5
mysql -u root -p
mysql> use mysql;
mysql> UPDATE `user` SET `password`=PASSWORD('newpassword') WHERE `user`='root';
mysql> FLUSH PRIVILEGES;