hugo-teek is loading...

mysql faq

最后更新于:

mysql

mysq.proc表 函数 存储过程

mysq.event表 event

触发器、视图:存放在库里面。(会生成对应的文件)

infomation_schema:虚拟内存 存放在内存里;

mysql backup: 用户数据库 mysql数据库;

数据库是所有it设施里性能最差的,性能短板。

nginx:并发量轻松上w 数据库,达到1k多,2k多,就慢的不行了。上w更笨达不到。 mysql:

mysql优化: 让mysql只干一件事儿:存数据。


笛卡尔乘积

即笛卡尔乘积,“雨露均沾”,利用 cross join实现

组合。(交叉连接是一种非常可怕的链接)

1[root@iZbp1in7y9nitzcajdv0ufZ data]# touch {a,b}.{log,txt,html}
2[root@iZbp1in7y9nitzcajdv0ufZ data]# ls
3a.html  a.log  a.txt  b.html  b.log  b.txt

数据库里,1w条记录,算小表。

千万级–才算是有一定规模的表;(百万级–中级)

2张小表(1w & 2w 交叉连接),交叉连接后,就变成亿级别了……这个就可怕了。

通常,mysql里是不会出现上亿级的,其性能会顶不住的。

oracle数据库—管理上亿级,轻松拿捏。

mysql里面不建议放上亿级。

但是真的达到了上亿级后,该怎么办呢?拆表!—分布式。

这个/var/lib/mysql目录就是存放mysql数据的地方

(很重要)

对应的目录就是mysql里的一个个数据库。

image-20240329061412890

数据库:一些相关数据的集合(也就是磁盘上的目录)

 1MariaDB [(none)]> show databases;
 2+--------------------+
 3| Database           |
 4+--------------------+
 5| information_schema |
 6| mysql              |
 7| performance_schema |
 8| test               |
 9+--------------------+
104 rows in set (0.002 sec)
11
12MariaDB [(none)]> 

image-20240329061412890

这里的每一个目录就是一个数据库。(有3个实体数据库,真正存在磁盘上的)

information_schema不是一个磁盘目录数据库,它是一个内存数据库。

这个数据里有很多很多表,每个表其实对应了每个文件。

image-20240329062511007

这里对应的都是一张张表。

user.frm这个表就是存放用户信息:

每个数据库都是由很多张表组成的。

进入数据库:

image-20240329062919878

image-20240427090016541

mysql.socket是数据库服务在启动过程中生成的

 1[root@linux-test ~]#ll /var/lib/mysql/mysql.sock 
 2srwxrwxrwx 1 mysql mysql 0 Mar 31 10:02 /var/lib/mysql/mysql.sock
 3
 4[root@linux-test ~]#mysqladmin -uroot -pxyy520 shutdown #手动停止mysql服务
 5[root@linux-test ~]#ll /var/lib/mysql/mysql.sock 
 6ls: cannot access /var/lib/mysql/mysql.sock: No such file or directory
 7[root@linux-test ~]#ls /var/lib/mysql/
 8aria_log.00000001  ib_buffer_pool  ib_logfile0  multi-master.info  mysql_upgrade_info
 9aria_log_control   ibdata1         ib_logfile1  mysql              performance_schema
10[root@linux-test ~]#

只要你mysql服务不启动,那么其mysql下的数据目录是不会生成数据的

image-20240422075317609

mysql配置文件:/etc/my.cnf.d目录

范例:

image-20240331083521313

当您在 my.cnf 文件中看到这行:

1!includedir /etc/my.cnf.d

它的意思是 MySQL 服务器将包含(include)指定目录 /etc/my.cnf.d 下所有的 .cnf 配置文件。MySQL 会在启动时读取这些文件,并应用这些额外的配置设置。这种机制通常用于组织和分离不同的配置选项,例如,您可以有一个单独的文件用于配置复制相关的选项,另一个文件用于配置特定的表缓存大小等。

当使用 !includedir 指令时,MySQL 将按照字母顺序读取目录下的文件,因此,如果有多个文件设置了相同的配置项,最后读取的文件中的设置将会覆盖之前的设置。

这种设计允许软件包维护人员,系统管理员,或者用户自己添加和管理配置文件,而不必修改主配置文件 my.cnf。这样做的好处是可以避免在升级或其他维护操作中对主配置文件的改动。

「为什么 MySQL 采用 B+ 树作为索引?」的问答

来自:

小林coding

https://xiaolincoding.com/

小林的回答:

B + 树的高度在 3 层时存储的数据可能已达千万级别,但对于跳表而言同样去维护千万的数据量那么所造成的跳表层数过高而导致的磁盘 io 次数增多,也就是使用 B + 树在存储同样的数据下磁盘 io 次数更少。

「update 没加索引会锁全表?」的问答

来自:

小林coding

https://xiaolincoding.com/

小林的回答:

网上很多人都说 update 不带索引就锁表,其实这是不对的。innodb 源码里面在扫码记录的时候,都是针对记录这个单位去加锁的, update 不带索引就是全表扫扫描,也就是表里的记录都加锁,所以大家误以为加了表锁,因此我的文章标题后面带了个问号

innodb 不会对 select、insert、delete、update 语句加表锁的,表锁在 inoodb 应用场景很少。

mysql命令操作历史

1[root@linux-test ~]#cat ~/.mysql_history

mysql开发规范

image-20240510065637402

image-20240510065704737

image-20240510065812956

现网数据库最佳配置实践😘

1、配置提示符

==范例:mysql的配置文件,修改提示符-2024.4.29(测试成功)==

本方法在MariaDB 10.4.33mysql5.6.47上均已成功测试。

  • 查看mysql版本
1[root@linux-test ~]#mysql -V
2mysql  Ver 15.1 Distrib 10.4.33-MariaDB, for Linux (x86_64) using readline 5.1
  • 默认mysql提示符(不易于辨识当前登录的属于哪个用户、哪台主机、哪个数据库)
 1[root@linux-test ~]#mysql
 2Welcome to the MariaDB monitor.  Commands end with ; or \g.
 3Your MariaDB connection id is 20
 4Server version: 10.4.33-MariaDB MariaDB Server
 5
 6Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 7
 8Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 9
10MariaDB [(none)]> 
  • 查看当前mysql默认提示符
1[root@test1 ~]#mysql --print-defaults -v
2mysql would have been started with the following arguments:
3--default-character-set=utf8mb4 --prompt=\r:\m:\s(\u@\h) [\d]>\_
  • man mysql帮助信息
1##man mysql帮助信息
2       ·   Use an option file.  You can set the prompt option in the [mysql] group of any MariaDB option file, such as /etc/my.cnf
3           or the .my.cnf file in your home directory. For example:
4
5               [mysql]
6               prompt=(\\u@\\h) [\\d]>\\_
  • ==方法1:临时修改mysql提示符==
 1##临时修改mysql提示符
 2[root@linux-test ~]#mysql -uroot -pxyy520 --prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_" 
 3Welcome to the MariaDB monitor.  Commands end with ; or \g.
 4Your MariaDB connection id is 21
 5Server version: 10.4.33-MariaDB MariaDB Server
 6
 7Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 8
 9Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
10
1102:31:40(root@localhost) [(none)]> 
12
13
14##临时修改mysql提示符
15[root@centos8 ~]#export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"  
16测试:
17[root@linux-test ~]#export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
18[root@linux-test ~]#mysql
19Welcome to the MariaDB monitor.  Commands end with ; or \g.
20Your MariaDB connection id is 22
21Server version: 10.4.33-MariaDB MariaDB Server
22
23Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
24
25Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
26
2708:27:55(root@localhost) [(none)]> 
  • ==方法2:持久修改mysql提示符(推荐)==
1[root@centos8 ~]#vim /etc/my.cnf.d/mysql-clients.cnf 
2[mysql]
3prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
  • 测试(符合预期)
 1[root@test1 ~]#mysql -uroot -pxyy520 
 2Warning: Using a password on the command line interface can be insecure.
 3Welcome to the MySQL monitor.  Commands end with ; or \g.
 4Your MySQL connection id is 5
 5Server version: 5.6.47 MySQL Community Server (GPL)
 6
 7Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
 8
 9Oracle is a registered trademark of Oracle Corporation and/or its
10affiliates. Other names may be trademarks of their respective
11owners.
12
13Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
14
1510:29:47(root@localhost) [(none)]> use test;
16Reading table information for completion of table and column names
17You can turn off this feature to get a quicker startup with -A
18
19Database changed
2010:29:50(root@localhost) [test]> 

测试结束。


同样方法,在mysql5.6上测试:

 1[root@test1 ~]#mysql -V
 2mysql  Ver 14.14 Distrib 5.6.47, for linux-glibc2.12 (x86_64) using  EditLine wrapper
 3
 4##配置
 5vim   /etc/my.cnf
 6[mysql]
 7prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
 8
 9##测试(符合预期)
10[root@test1 ~]#mysql -uroot -pxyy520 
11Warning: Using a password on the command line interface can be insecure.
12Welcome to the MySQL monitor.  Commands end with ; or \g.
13Your MySQL connection id is 5
14Server version: 5.6.47 MySQL Community Server (GPL)
15
16Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
17
18Oracle is a registered trademark of Oracle Corporation and/or its
19affiliates. Other names may be trademarks of their respective
20owners.
21
22Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
23
2410:29:47(root@localhost) [(none)]> use test;
25Reading table information for completion of table and column names
26You can turn off this feature to get a quicker startup with -A
27
28Database changed
2910:29:50(root@localhost) [test]> 

2、配置字符集

字符集和排序😜

字符集命令汇总

  • 早期MySQL版本默认为latin1,从MySQL8.0开始默认字符集已经为 utf8mb4,但前期版本一定要记得修改字符集,不然后期中文可能出现乱码;
  • 推荐直接设置mysql全局,让其字符集为utf8mb4;
 1查看数据库支持的所有字符集:
 2SHOW CHARACTER SET;
 3
 4查看当前数据库字符集的使用情况:
 5show variables like 'character%';
 6
 7查看当前表使用的字符集:
 8show table status like 'student'\G
 9Collation: utf8_general_ci
10或者查看创建表时的命令:
11show create table student;
12
13插入一条中文数据:
14insert student (name,age)values('小彦彦',18);
15删除一条中文数据:
16delete from student where id=16;
17select *from student;
18
19设置表字符集:
20ALTER TABLE student character set utf8mb4;
21
22注意:
23字符集相关文件:ll /usr/share/mysql/charsets/
24`/data/mysql/test/db.opt `文件存放了当前数据库苏使用的字符集

范例

  • 查看数据库支持的所有字符集:
 1mysql> SHOW CHARACTER SET;
 2+----------+-----------------------------+---------------------+--------+
 3| Charset  | Description                 | Default collation   | Maxlen |
 4+----------+-----------------------------+---------------------+--------+
 5| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
 6| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
 7| cp850    | DOS West European           | cp850_general_ci    |      1 |
 8| hp8      | HP West European            | hp8_english_ci      |      1 |
 9| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
10| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
11| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
12| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
13| ascii    | US ASCII                    | ascii_general_ci    |      1 |
14| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
15| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
16| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
17| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
18| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
19| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
20| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
21| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
22| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
23| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
24| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
25| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
26| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
27| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
28| cp866    | DOS Russian                 | cp866_general_ci    |      1 |
29| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
30| macce    | Mac Central European        | macce_general_ci    |      1 |
31| macroman | Mac West European           | macroman_general_ci |      1 |
32| cp852    | DOS Central European        | cp852_general_ci    |      1 |
33| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
34| utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |
35| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
36| utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |
37| utf16le  | UTF-16LE Unicode            | utf16le_general_ci  |      4 |
38| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
39| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
40| utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |
41| binary   | Binary pseudo charset       | binary              |      1 |
42| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
43| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
44| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
45+----------+-----------------------------+---------------------+--------+
4640 rows in set (0.01 sec)
47
48mysql> 
  • 范例:字符集相关文件
 1[root@linux-test ~]#ll /usr/share/mysql/charsets/
 2total 232
 3-rw-r--r--. 1 root root  5526 Apr 20  2018 armscii8.xml
 4-rw-r--r--. 1 root root  5512 Apr 20  2018 ascii.xml
 5-rw-r--r--. 1 root root  8241 Apr 20  2018 cp1250.xml
 6-rw-r--r--. 1 root root  8365 Apr 20  2018 cp1251.xml
 7-rw-r--r--. 1 root root  5569 Apr 20  2018 cp1256.xml
 8-rw-r--r--. 1 root root  8902 Apr 20  2018 cp1257.xml
 9-rw-r--r--. 1 root root  5506 Apr 20  2018 cp850.xml
10-rw-r--r--. 1 root root  5528 Apr 20  2018 cp852.xml
11-rw-r--r--. 1 root root  5613 Apr 20  2018 cp866.xml
12-rw-r--r--. 1 root root  6529 Apr 20  2018 dec8.xml
13-rw-r--r--. 1 root root  5516 Apr 20  2018 geostd8.xml
14-rw-r--r--. 1 root root  5728 Apr 20  2018 greek.xml
15-rw-r--r--. 1 root root  5517 Apr 20  2018 hebrew.xml
16-rw-r--r--. 1 root root  5502 Apr 20  2018 hp8.xml
17-rw-r--r--. 1 root root 18307 Apr 20  2018 Index.xml
18-rw-r--r--. 1 root root  5529 Apr 20  2018 keybcs2.xml
19-rw-r--r--. 1 root root  5510 Apr 20  2018 koi8r.xml
20-rw-r--r--. 1 root root  6532 Apr 20  2018 koi8u.xml
21-rw-r--r--. 1 root root  9816 Apr 20  2018 latin1.xml
22-rw-r--r--. 1 root root  7238 Apr 20  2018 latin2.xml
23-rw-r--r--. 1 root root  5515 Apr 20  2018 latin5.xml
24-rw-r--r--. 1 root root  7438 Apr 20  2018 latin7.xml
25-rw-r--r--. 1 root root  8047 Apr 20  2018 macce.xml
26-rw-r--r--. 1 root root  8058 Apr 20  2018 macroman.xml
27-rw-r--r--. 1 root root  1749 Apr 20  2018 README
28-rw-r--r--. 1 root root  6530 Apr 20  2018 swe7.xml
29[root@linux-test ~]#
  • 范例:/data/mysql/test/db.opt 文件存放了当前数据库苏使用的字符集
 1mysql> show variables like 'character%';
 2+--------------------------+----------------------------------------------------------------+
 3| Variable_name            | Value                                                          |
 4+--------------------------+----------------------------------------------------------------+
 5| character_set_client     | utf8                                                           |
 6| character_set_connection | utf8                                                           |
 7| character_set_database   | latin1                                                         |
 8| character_set_filesystem | binary                                                         |
 9| character_set_results    | utf8                                                           |
10| character_set_server     | latin1                                                         |
11| character_set_system     | utf8                                                           |
12| character_sets_dir       | /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64/share/charsets/ |
13+--------------------------+----------------------------------------------------------------+
148 rows in set (0.00 sec)
15
16[root@test1 ~]#cat /data/mysql/test/db.opt 
17default-character-set=latin1
18default-collation=latin1_swedish_ci
  • 查看当前数据库字符集的使用情况:
 1mysql> show variables like 'character%';
 2+--------------------------+----------------------------------------------------------------+
 3| Variable_name            | Value                                                          |
 4+--------------------------+----------------------------------------------------------------+
 5| character_set_client     | utf8                                                           |
 6| character_set_connection | utf8                                                           |
 7| character_set_database   | latin1                                                         |
 8| character_set_filesystem | binary                                                         |
 9| character_set_results    | utf8                                                           |
10| character_set_server     | latin1                                                         |
11| character_set_system     | utf8                                                           |
12| character_sets_dir       | /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64/share/charsets/ |
13+--------------------------+----------------------------------------------------------------+
148 rows in set (0.00 sec)
15
16mysql> 
  • 查看支持所有排序规则:
1mysql> show COLLATION;
  • 查看当前使用的排序规则
 1mysql> SHOW VARIABLES LIKE 'collation%';
 2+----------------------+-------------------+
 3| Variable_name        | Value             |
 4+----------------------+-------------------+
 5| collation_connection | utf8_general_ci   |
 6| collation_database   | latin1_swedish_ci |
 7| collation_server     | latin1_swedish_ci |
 8+----------------------+-------------------+
 93 rows in set (0.00 sec)
10
11mysql> 

image-20240423064541339

  • 范例:Mariadb10.3 默认的字符集(latin1 )和排序规则
 1MariaDB [(none)]> SELECT VERSION();
 2+-----------------+
 3| VERSION()       |
 4+-----------------+
 5| 10.3.17-MariaDB |
 6+-----------------+
 71 row in set (0.000 sec)
 8MariaDB [(none)]> show variables like 'character%';
 9+--------------------------+------------------------------+
10| Variable_name           | Value                       |
11+--------------------------+------------------------------+
12| character_set_client     | utf8                         |
13| character_set_connection | utf8                         |
14| character_set_database   | latin1                       |
15| character_set_filesystem | binary                       |
16| character_set_results   | utf8                         |
17| character_set_server     | latin1                       |
18| character_set_system     | utf8                         |
19| character_sets_dir       | /usr/share/mariadb/charsets/ |
20+--------------------------+------------------------------+
218 rows in set (0.003 sec)
22MariaDB [(none)]> SHOW VARIABLES LIKE 'collation%';
23+----------------------+-------------------+
24| Variable_name       | Value             |
25+----------------------+-------------------+
26| collation_connection | utf8_general_ci   |
27| collation_database   | latin1_swedish_ci |
28| collation_server     | latin1_swedish_ci |
29+----------------------+-------------------+
303 rows in set (0.001 sec)
  • 范例:MySQL 8.0 默认的字符集(utf8mb4)和排序规则
 1mysql> SELECT VERSION();
 2+-----------+
 3| VERSION() |
 4+-----------+
 5| 8.0.17   |
 6+-----------+
 71 row in set (0.00 sec)
 8mysql> show variables like 'character%';
 9+--------------------------+----------------------------+
10| Variable_name           | Value                     |
11+--------------------------+----------------------------+
12| character_set_client     | utf8mb4                   |
13| character_set_connection | utf8mb4                   |
14| character_set_database   | utf8mb4                   |
15| character_set_filesystem | binary                     |
16| character_set_results   | utf8mb4                   |
17| character_set_server     | utf8mb4                   |
18| character_set_system     | utf8                       |
19| character_sets_dir       | /usr/share/mysql/charsets/ |
20+--------------------------+----------------------------+
218 rows in set (0.01 sec)
22mysql> show variables like 'collation%';
23+----------------------+--------------------+
24| Variable_name       | Value             |
25+----------------------+--------------------+
26| collation_connection | utf8mb4_0900_ai_ci |
27| collation_database   | utf8mb4_0900_ai_ci |
28| collation_server     | utf8mb4_0900_ai_ci |
29+----------------------+--------------------+
303 rows in set (0.00 sec)

范例:测试mysql5.6 数据库对中文的支持现象

  • mysql5.6数据库:(默认是latin1字符集,插入中文数据时会报错)
 1##查看当前数据库字符集的使用情况:
 2mysql> show variables like 'character%';
 3character_set_client     | utf8
 4character_set_server     | latin1
 5##查看对应文件:
 6[root@test1 ~]#cat /data/mysql/test/db.opt 
 7default-character-set=latin1
 8default-collation=latin1_swedish_ci
 9
10
11##创建一张新表
12CREATE TABLE `student3` (
13  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
14  `name` varchar(20) NOT NULL,
15  `age` tinyint(3) unsigned DEFAULT NULL,
16  `gender` enum('M','F') DEFAULT 'M',
17  PRIMARY KEY (`id`)
18) ;
19
20
21##插入一条中文数据
22mysql> insert student3 (name,age,gender)values('小彦彦',18,'F');
23ERROR 1366 (HY000): Incorrect string value: '\xE5\xB0\x8F\xE5\xBD\xA6...' for column 'name' at row 1
24
25
26##查看表
27mysql> select *from student3;
28Empty set (0.00 sec)
  • maridb-10.3数据库:(默认是latin1字符集,插入中文数据时会报错)
 1##查看当前数据库字符集的使用情况:
 208:37:18(root@localhost) [test]> show variables like 'character%';
 3character_set_client     | utf8
 4character_set_server     | latin1
 5##查看对应文件:
 6[root@test2 ~]#cat /var/lib/mysql/test/db.opt 
 7default-character-set=latin1
 8default-collation=latin1_swedish_ci
 9
10
11##创建一张新表
12CREATE TABLE `student3` (
13  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
14  `name` varchar(20) NOT NULL,
15  `age` tinyint(3) unsigned DEFAULT NULL,
16  `gender` enum('M','F') DEFAULT 'M',
17  PRIMARY KEY (`id`)
18) ;
19
20
21##插入一条中文数据
2208:38:53(root@localhost) [test]> insert student3 (name,age,gender)values('小彦彦',18,'F');
23ERROR 1366 (22007): Incorrect string value: '\xE5\xB0\x8F\xE5\xBD\xA6...' for column `test`.`student3`.`name` at row 1
24
25
26##查看表
2708:38:59(root@localhost) [test]> select *from student3;
28Empty set (0.000 sec)
  • 但在其他的版本里,有可能是乱码:

image-20240429084043733

  • 因此,这里直接给mysql服务配置字符集为utf8mb4:

这里以mysql5.6为例子:

image-20240429084217851

 1##1、查看当前使用的字符集
 2mysql> show variables like 'character%';
 3##2、设置
 4[root@linux-test ~]#vim /etc/my.cnf
 5[mysqld]
 6……
 7character-set-server=utf8mb4 #添加此行
 8
 9[mysql]
10default-character-set=utf8mb4
11#重启mysql服务
12systemctl restart mysqld
13
14##3、确认(符合预期)
15mysql> show variables like 'character%';
16| character_set_client     | utf8mb4
17| character_set_server     | utf8mb4
  • 再次测试
 1##查看当前数据库字符集的使用情况:
 2mysql> show variables like 'character%';
 3character_set_client     | utf8mb4
 4character_set_server     | utf8mb4
 5
 6
 7##创建新数据库test2
 8create database test2;
 9##查看对应文件:
10[root@test1 ~]#cat /data/mysql/test2/db.opt 
11default-character-set=utf8mb4
12default-collation=utf8mb4_general_ci
13
14##
15use test2;
16##创建一张新表
17CREATE TABLE `student3` (
18  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
19  `name` varchar(20) NOT NULL,
20  `age` tinyint(3) unsigned DEFAULT NULL,
21  `gender` enum('M','F') DEFAULT 'M',
22  PRIMARY KEY (`id`)
23) ;
24
25
26##插入一条中文数据
27mysql> insert student3 (name,age,gender)values('小彦彦',18,'F');
28Query OK, 1 row affected (0.00 sec)
29
30
31##查看表:(符合预期)
32mysql> select *from student3;
33+----+-----------+------+--------+
34| id | name      | age  | gender |
35+----+-----------+------+--------+
36|  1 | 小彦彦    |   18 | F      |
37+----+-----------+------+--------+
381 row in set (0.00 sec)

设置服务器默认的字符集

==🍊 实战:设置服务器默认的字符集-2024.4.22(测试成功)==

测试环境:5.6.47 MySQL Community Server

 1##1、查看当前使用的字符集
 2mysql> show variables like 'character%';
 3+--------------------------+----------------------------------------------------------------+
 4| Variable_name            | Value                                                          |
 5+--------------------------+----------------------------------------------------------------+
 6| character_set_client     | utf8                                                           |
 7| character_set_connection | utf8                                                           |
 8| character_set_database   | latin1                                                         |
 9| character_set_filesystem | binary                                                         |
10| character_set_results    | utf8                                                           |
11| character_set_server     | latin1                                                         |
12| character_set_system     | utf8                                                           |
13| character_sets_dir       | /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64/share/charsets/ |
14+--------------------------+----------------------------------------------------------------+
158 rows in set (0.00 sec)
16
17mysql> 
18
19##2、设置
20[root@linux-test ~]#vim /etc/my.cnf
21[mysqld]
22……
23character-set-server=utf8mb4 #添加此行
24#重启mysql服务
25systemctl restart mysqld
26
27##3、确认(符合预期)
28mysql> show variables like 'character%';
29+--------------------------+----------------------------------------------------------------+
30| Variable_name            | Value                                                          |
31+--------------------------+----------------------------------------------------------------+
32| character_set_client     | utf8                                                           |
33| character_set_connection | utf8                                                           |
34| character_set_database   | utf8mb4                                                        |
35| character_set_filesystem | binary                                                         |
36| character_set_results    | utf8                                                           |
37| character_set_server     | utf8mb4                                                        |
38| character_set_system     | utf8                                                           |
39| character_sets_dir       | /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64/share/charsets/ |
40+--------------------------+----------------------------------------------------------------+
418 rows in set (0.01 sec)
42
43mysql> 

设置mysql客户端默认的字符集

==🍊 实战:设置mysql客户端默认的字符集-2024.4.22(测试成功)==

测试环境:5.6.47 MySQL Community Server

 1##1、查看当前使用的字符集
 2mysql> show variables like 'character%';
 3+--------------------------+----------------------------------------------------------------+
 4| Variable_name            | Value                                                          |
 5+--------------------------+----------------------------------------------------------------+
 6| character_set_client     | utf8                                                           |
 7| character_set_connection | utf8                                                           |
 8| character_set_database   | latin1                                                         |
 9| character_set_filesystem | binary                                                         |
10| character_set_results    | utf8                                                           |
11| character_set_server     | latin1                                                         |
12| character_set_system     | utf8                                                           |
13| character_sets_dir       | /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64/share/charsets/ |
14+--------------------------+----------------------------------------------------------------+
158 rows in set (0.00 sec)
16
17mysql> 
18
19##2、设置
20[root@linux-test ~]#vim /etc/my.cnf
21[mysql]
22……
23default-character-set=utf8mb4 #添加此行
24
25
26##3、确认(符合预期)
27mysql> show variables like 'character%';
28+--------------------------+----------------------------------------------------------------+
29| Variable_name            | Value                                                          |
30+--------------------------+----------------------------------------------------------------+
31| character_set_client     | utf8mb4                                                        |
32| character_set_connection | utf8mb4                                                        |
33| character_set_database   | utf8mb4                                                        |
34| character_set_filesystem | binary                                                         |
35| character_set_results    | utf8mb4                                                        |
36| character_set_server     | utf8mb4                                                        |
37| character_set_system     | utf8                                                           |
38| character_sets_dir       | /usr/local/mysql-5.6.47-linux-glibc2.12-x86_64/share/charsets/ |
39+--------------------------+----------------------------------------------------------------+
408 rows in set (0.01 sec)
41
42mysql> 

本次配置代码汇总

 1##1、查看当前使用的字符集
 2mysql> show variables like 'character%';
 3
 4##2、配置
 5vim /etc/my.cnf
 6[mysqld]
 7character-set-server=utf8mb4 #添加此行
 8
 9[mysql]
10default-character-set=utf8mb4 #添加此行
11
12##3、重启mysql服务
13#重启mysql服务
14systemctl restart mysqld
15
16
17
18
19##4、测试
20##查看当前数据库字符集的使用情况:
21mysql> show variables like 'character%';
22character_set_client     | utf8mb4
23character_set_server     | utf8mb4
24
25
26##创建新数据库test2
27create database test2;
28##查看对应文件:
29[root@test1 ~]#cat /data/mysql/test2/db.opt 
30default-character-set=utf8mb4
31default-collation=utf8mb4_general_ci
32
33##
34use test2;
35##创建一张新表
36CREATE TABLE `student3` (
37  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
38  `name` varchar(20) NOT NULL,
39  `age` tinyint(3) unsigned DEFAULT NULL,
40  `gender` enum('M','F') DEFAULT 'M',
41  PRIMARY KEY (`id`)
42) ;
43
44
45##插入一条中文数据
46mysql> insert student3 (name,age,gender)values('小彦彦',18,'F');
47Query OK, 1 row affected (0.00 sec)
48
49
50##查看表:(符合预期)
51mysql> select *from student3;
52+----+-----------+------+--------+
53| id | name      | age  | gender |
54+----+-----------+------+--------+
55|  1 | 小彦彦    |   18 | F      |
56+----+-----------+------+--------+
571 row in set (0.00 sec)

如果想了解my.cnf文件 里面的参数都是什么意思

https://developer.aliyun.com/article/822935

image-20240420160628621

推荐使用微信支付
微信支付二维码
推荐使用支付宝
支付宝二维码
最新文章

文档导航