MySQL/MariaDB是使用非常广泛的关系型数据库管理系统,但是在使用过程中还是有一些细节需要注意,最为常见的问题是就是由于字符集不一致而导致开发的应用显示乱码。目前最为保险的方法是采用UTF-8字符集(也就是通常所说的Unicode编码),这样开发出来的应用和存储在数据库中的内容会保持一致,降低出现乱码的风险。

本教程将详细讲解如何将MySQL/MariaDB的字符集修改为UTF-8,以保证应用具有最大程度的兼容性。

虽然MySQL/MariaDB支持UTF-8字符集,但是在创建数据库和数据表的时候如不特别指定则不会以UTF-8字符集作为默认字符集,一般采用Latin字符集,这对于中文、日文等非字符编码的应用就产生了一定的局限性。

要修改MySQL/MariaDB的字符集,需要通过如下两个步骤:

  • 确认数据库当前的默认字符集
  • 将字符集修改为UTF-8

1] 确认数据库当前默认的字符集

想要查看MySQL/MariaDB数据库当前的默认字符集,则需要登录到数据库服务器,然后执行相关查询:

# mysql -u root -p
MariaDB [(none)]> SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "DBNAME";

注意在查询时将语句中的”DBNAME”替换为实际的数据库名,运行示意图如下:

图.1 MariaBD查询数据库当前字符集

如图.1所示,我们创建的数据库”RULTR”所使用的字符集为latin1,并不是我们想使用的UTF-8。

想要查看数据表的字符集,则使用如下语句:

MariaDB [(none)] SHOW CREATE TABLE TABLENAME

注意使用时将”TABLENAME”替换为实际的数据表名。

2] 修改数据库字符集

数据库包含不同的数据表,想要修改指定数据库中所有数据表的的字符集,可以使用如下命令快速完成:

# mysql --database=DBNAME -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' | mysql --database=DBNAME

图.2 修改指定数据库所有数据表的字符集

如图.2所示,可以使用一条命令将数据库”RULTR”的所有数据表都修改了字符集,注意使用该命令时需要在”/etc/my.cnf”文件中添加如下内容,否则执行时会报错:

[client]
user=USERNAME
password="PASSWORD"

将登录服务器的用户名和密码输入在此文件后,再通过客户端登录服务器时就不需要输入密码了。

如果想修改某个数据库的字符集,则相对简单,登录进数据库输入如下语句即可:

MariaDB [(none)] ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

以上就是修改MySQL/MariaDB数据库字符集的简单教程,希望可以帮助大家解决实际遇到的问题。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注