ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL演示使用及数据库中的编码问题解决方法

2022-04-07 11:03:21  阅读:188  来源: 互联网

标签:set 演示 数据库 MySQL character mysql employees


4. MySQL演示使用

4.1 MySQL的使用演示

1.查看所有的数据库

show database;

image

"information_schema"是MySQL系统自带的数据库,主要保存MySQL数据库服务器的系统信息,比如数据库的名称、数据表的名称、字段名称、存取权限、数据文件、所在的文件夹和系统使用的文件夹,等等

"performance_schema"是MySQL系统自带的数据库,可以用来监控MySQL的各类性能指标。

"sys"数据库是MySQL系统自带的数据库,主要作用是以一种更容易被理解的方式展示MySQL数据库服务器的各类性能指标,帮助系统管理和开发人员监控 MySQL的技术性能。

"mysql"数据库保存了MySQL数据库服务器运行时需要的系统信息,比如数据文件夹、当先使用的字符集、约束检查信息,等等

为什么Workbench里面只能看到"demo"和"sys"这两个数据库呢?

这是因为,Workbench时图形化的管理工具,主要面向开发人员,"demo"和"sys"这两个数据库已经够用了。如果有特殊需求,比如,需要监控MySQL数据库各项性能指标、直接操作MySQL数据库系统文件等,可以由DBA通过SQL语句,查看其他的系统数据库。

2.创建自己的数据库

create database 数据库名;

#创建atguigudb数据库,该名称不能与已经存在的数据库重名。
create database dbtest1;

image

image

创建表时:

create table employees(id int,name varchar(15));

image

3.使用自己的数据库

use 数据库名;

#shiyong dbtest1数据库
use dbtest1;

#创建表
create table employees(id int,name varchar(15));

#展示表
show tables;

#查看表中数据
select * from employees;

insert into employees values(1001,'Tom');

insert into employees values(1002,'shkstart');

image

image

image

image

image

说明:如果没有使用use语句,后面针对数据库的操作也没有加”数据库名“的限定,那么会报”ERROR 1046 (3D000):No database selected“ (没有选择数据库)

5.7

image

8.0可以

image

字符集默认为欧洲的拉丁码。不是utf-8所以导致添加不成功。

使用完use语句之后,如果接下开的SQL都是针对一个数据库操作的,那就不用重复use了,如果要针对另一个数据库操作,那么要重新use。

4.查看某个库的所有表格

show tables;#要求前面有use语句

show tables from 数据库名;

5.创建新的表格

create table 表名称(
	字段名 数据类型,
    字段名 数据类型,
);

说明:如果最后一个字段,后面就是用加逗号,因为都好的作用是分割每个字段。

#创建学生表
create table student(
	id int,
    name varchar(20) #说名字的长度不超过20个字符
);

6.查看一个表的数据

select * from 数据库表名称;
#查看学生白的数据
select * from student;

7.添加一条记录

insert into 表名称 values(值列表);

#添加两条记录到student表中
insert into student values(1,'张三');
insert into student values(2,'李四');

#我测试使用的语句
insert into employees values(1003,'杰瑞');

报错

mysql> insert into employees values(1003,'杰瑞');
ERROR 1366 (HY000): Incorrect string value: '\xBD\xDC\xC8\xF0' for column 'name' at row 1

字符集问题。

8.查看表的创建信息

show create table 表名称\G

#查看student表的详细创建信息
show create table\G

#测试语句
show create table employees\G
*************************** 1. row ***************************
       Table: employees
Create Table: CREATE TABLE `employees` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql>

上面结果显示employees的表格的默认字符集是“latin1”不支持中文。

9.查看数据库的创建信息

show create database 数据库名\G

#查看atguigudb数据库的详细创建信息
show create database atguigudb\G
#结果如下
*************************** 1. row ***************************
       Database: dbtest1
Create Database: CREATE DATABASE `dbtest1` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)

上面的结果显示dbtest1数据库也不支持中文,字符集默认是latin1。

10.删除表格

drop table 表名;
#删除学生表
drop table student;

11.删除数据库

drop database 数据库名;
#删除atguigu数据库
drop database atguigudb;

4.2MySQL的编码设置

MySQL 5.7中

问题再现:命令操作sql乱码问题

mysql> insert into employees values(1003,'杰瑞');
ERROR 1366 (HY000): Incorrect string value: '\xBD\xDC\xC8\xF0' for column 'name' at row 1

问题解决

步骤1:查看编码命令

show variables like 'character_%';
show variables like 'collation_%';
mysql> show variables like 'character_%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | gbk                                       |
| character_set_connection | gbk                                       |
| character_set_database   | latin1                                    |
| character_set_filesystem | binary                                    |
| character_set_results    | gbk                                       |
| character_set_server     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | D:\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+-------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
mysql> show variables like 'collation_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci    |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set, 1 warning (0.00 sec)

步骤2:修改mysql的数据目录下的my.ini配置文件

[mysql] # 大概在63行左右,在其下添加
...
default-character-set=utf8  #默认字符集

[mysql] # 大概在76行左右,在其下添加
...
character-set-server=utf8
collation-server=utf8_general_ci
mysql> show variables like 'character_%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | gbk                                       |
| character_set_connection | gbk                                       |
| character_set_database   | latin1                                    |
| character_set_filesystem | binary                                    |
| character_set_results    | gbk                                       |
| character_set_server     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | D:\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+-------------------------------------------+
8 rows in set, 1 warning (0.00 sec)

注意:建议修改配置文件使用notpad++等高级文本编辑器,使用记事本等软件打开修改后可能会导致文件编码修改为"含BOM头"的编码,从而服务重启失败。

步骤3:重启服务

步骤四:查看编码命令

重启MySQL后

mysql> show variables like 'character_%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | gbk                                       |
| character_set_connection | gbk                                       |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | gbk                                       |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | D:\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+-------------------------------------------+
8 rows in set, 1 warning (0.01 sec)

image

mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set, 1 warning (0.00 sec)
mysql> insert into employees values(1003,'杰瑞');
ERROR 1366 (HY000): Incorrect string value: '\xBD\xDC\xC8\xF0' for column 'name' at row 1

我们不是修改了吗?为什么还不行?

mysql> show create table employees;
+-----------+----------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                     |
+-----------+----------------------------------------------------------------------------------------------------------------------------------+
| employees | CREATE TABLE `employees` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

这里发现我们建表的时候使用的是拉丁,改完后它还是拉丁。

删库:

mysql> drop database dbtest1;
Query OK, 1 row affected (0.42 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
    
mysql> create database dbtest1;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dbtest1            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> use dbtest1;
Database changed
mysql> create table employees(id int,name varchar(15));
Query OK, 0 rows affected (0.21 sec)

mysql> show create table employees;
+-----------+--------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                   |
+-----------+--------------------------------------------------------------------------------------------------------------------------------+
| employees | CREATE TABLE `employees` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> insert into employees values(1001,'Tom');
Query OK, 1 row affected (0.07 sec)

mysql> insert into employees values(1002,'杰瑞');
Query OK, 1 row affected (0.03 sec)

mysql> select * from employees;
+------+------+
| id   | name |
+------+------+
| 1001 | Tom  |
| 1002 | 杰瑞 |
+------+------+
2 rows in set (0.00 sec)

我的是这样。和视频中的有出入。。要有兄弟能知道为什么 麻烦可以告诉我下。

image

MySQL8.0中

在MySQL 8.0版本之。网站开发人员在数据库涉及的时候前,默认字符集为Latin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码改为utf8字符集。如果忘了修改默认的编码,就会出现乱码的问题。从MySQL 8.0开始,数据库的默认utf8mb4,从而避免了上述的乱码问题。

标签:set,演示,数据库,MySQL,character,mysql,employees
来源: https://www.cnblogs.com/qkshhan/p/16111207.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有