MySql 解决中文乱码问题

关于数据库中文乱码问题

在 mysql 中输入中文, 乱码, 尝试了修改数据库, 数据表的字符编码集, 都没有用, 最后发现问题如下:

  1. 修改数据库编码集
show variables like '%char%';

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /opt/lampp/share/charsets/ |
+--------------------------+----------------------------+

此时可以 mysql 会显示当前数据库的编码集, 其实这里不改无妨, 如果要修改, 清参照下方代码:

set character_set_server=utf8;
set character_set_database=utf8;
show variables like '%char%';
  1. 修改数据表的编码集
MariaDB [(none)]> show create table wall_notices.notices \G;

*************************** 1. row ***************************
       Table: notices
Create Table: CREATE TABLE `notices` (
  `nt_id` int(11) NOT NULL AUTO_INCREMENT,
  `nt_title` char(20) DEFAULT NULL,
  `nt_content` mediumtext,
  `nt_create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`nt_id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8

, 这里是正确的, 如果不是这个值, 一般都需要修改, 修改代码:
输入第一行代码, mysql 就会显示 table 的创建代码, 此时可以发现DEFAULT CHARSET=utf8, 这里是正确的, 如果不是这个值, 一般都需要修改, 修改代码:

create table user(name varchar(11)) default charset=utf8;
ALTER TABLE `table` DEFAULT CHARACTER SET utf8;

上述两行分别是创建之时指出编码集和创建之后修改编码集.

  1. 字段编码排序规则

一般前两点完成, 还是无法正常显示中文, 需要修改字段的排序规则

ALTER TABLE `tablename` CHANGE `字段名1` `字段名2` VARCHAR(36) CHARACTER SET utf8 NOT NULL;

到这里基本就没有什么问题了.

  1. 另注:

In newer versions of Confluence, database requirements become more and more stringent. This is to ensure that users get the most consistent experiences when working with content, regardless of the content in their database. 

Collation in MySQL can be complicated because you can have a separate collation set at:

  1. The database level

  2. The table level

  3. The column level