MySQL數據庫基本操作-DDL和DML

1. DDL解釋

DDL(Data Definition Language),數據定義語言,該語言部分包括以下內容:

  • 對數據庫的常用操作
  • 對表結構的常用操作
  • 修改表結構

2. 對數據庫的常用操作

功能SQL
查看所有的數據庫show databases;
查看有印象的數據庫show?databases like ' _xx%'(_一個字符;%任意字符)
創建數據庫create database [if not exists] mydb1 [charset=utf8]
切換 (選擇要操作的) 數據庫use mydb1;
刪除數據庫drop database [if exists] mydb1;
修改數據庫編碼alter database mydb1 character set utf8;

注意:

像[if not exists]的[ ]代表可選項含義,真正寫命令是如果要寫,不用加[ ],加了會將報錯變為警告

2.1 對表結構的常用操作-創建表

# 創建表
create table [if not exists]表名(字段名1 類型[(寬度)] [約束條件] [comment '字段說明'],字段名2 類型[(寬度)] [約束條件] [comment '字段說明'],字段名3 類型[(寬度)] [約束條件] [comment '字段說明']
)[表的一些設置];創建表是構建一張空表,指定這個表的名字,這個表有幾列,每一列叫什么名字,
以及每一列存儲的數據類型。

數據類型

數據類型是指在創建表的時候為表中字段指定數據類型,只有數據符合類型要求才能存儲起來,使用數據類型的原則是:夠用就行,盡量使用取值范圍小的,而不用大的,這樣可以更多的節省存儲空間。

  • 數值類型
類型大小范圍(有符號)范圍(無符號)用途
TINYINT1 byte(-128,127)(0,255)小整數值
SMALLINT2 bytes(-32 768,32 767)(0,65 535)大整數值
MEDIUMINT3 bytes(-8 388 608,8 388 607)(0,16 777 215)大整數值

INT或

INTEGER

4 bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整數值
BIGINT8 bytes(-9,223,372,036,854,775,808,9
223 372 036 854 775 807)

(0,18 446 744 073

709 551 615)

極大整數值
FLOAT4 bytes(-3.402 823 466 E+38,3.402 823
466 351 E+38)
0,(1.175 494
351 E-38,
3.402 823 466
E+38)
單精度
浮點數值
DOUBLE8 bytes(-1.797 693 134 862 315 7
E+308,1.797 693 134 862 315 7
E+308)
0,(2.225 073
858 507 201 4
E-308,1.797
693 134 862
315 7 E+308)
雙精度
浮點數值
DECIMAL(一般財務用)依賴于M和D的值依賴于M和D
的值
小數值

  • 字符串類型
類型大小用途
CHAR0-255 bytes定長字符串
VARCHAR0-65535 bytes變長字符串
TINYBLOB0-255 bytes不超過 255 個字符的二進制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二進制形式的長文本數據
TEXT0-65 535 bytes長文本數據
MEDIUMBLOB0-16 777 215 bytes二進制形式的中等長度文本數據
MEDIUMTEXT0-16 777 215 bytes中等長度文本數據
LONGBLOB0-4 294 967 295 bytes二進制形式的極大文本數據
LONGTEXT0-4 294 967 295 bytes極大文本數據

  • 日期和時間類型
類型大小(bytes)范圍格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS時間值或
持續時間
YEAR[(2|4)]1(19)70-(20)69/1901-2155或0000YYYY(默認四位數)年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD? HH:MM:SS混合日期和時間值
TIMESTAMP41970-01-01 00:00:00/2038結束
時間是第 2147483647 秒,北京
時間 2038-1-19 11:14:07,格林
尼治時間 2038年1月19日 凌晨
03:14:07
YYYYMMDD
HHMMSS
混合日期
和時間值,
時間戳

2.2 對表結構的常用操作—其他操作

功能SQL
查看當前數據庫的所有表名稱show tables;
查看指定某個表的創建語句show create table 表名;
查看表結構desc 表名
刪除表drop table 表名
修改表編碼alter table 表名 convert to character set utf8;

2.3 對表結構的常用操作-修改表結構格式

修改表添加列
alter table 表名 add 列名 類型(長度) [約束:first/after xx];
修改列名和類型
alter table 表名 change 舊列名 新列名 類型(長度) 約束;
修改列類型
alter table 表名 modify 列名 類型(長度);
修改表刪除列.
alter table 表名 drop 列名;
修改表名
rename table 表名 to 新表名;
alter table rename to 新表名

3. DML基本介紹

DML是指數據操作語言,英文全稱是Data Manipulation Language,用來對數據庫中表的數據記錄進行更新。關鍵字:

  • 插入insertcrus
  • 刪除delete
  • 更新update

3.1 數據插入

insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); 
//向表中插入某些
insert into 表 values (值1,值2,值3...); ? ? //向表中插入所有列

3.2 數據修改

update 表名 set 字段名=值,字段名=值...;   //改所有數據的
update 表名 set 字段名=值,字段名=值... where 條件;   //限制改某些數據的

3.3 數據刪除

delete from 表名 [where 條件];
truncate table 表名 或者 truncate 表名

Caution
注意:delete和truncate原理不同,delete只刪除內容,而truncate類似于drop table ,可以理解為是將整個表刪除,然后再創建該表;

4. 使用演示

4.1 MySQL的使用演示

1、查看所有的數據庫

show databases;

“information_schema”是 MySQL 系統自帶的數據庫,主要保存 MySQL 數據庫服務器的系統信息,比如數據庫的名稱、數據表的名稱、字段名稱、存取權限、數據文件 所在的文件夾和系統使用的 文件夾,等等


“performance_schema”是 MySQL 系統自帶的數據庫,可以用來監控 MySQL 的各類性能指標。


“sys”數據庫是 MySQL 系統自帶的數據庫,主要作用是以一種更容易被理解的方式展示 MySQL 數據庫服務器的各類性能指標,幫助系統管理員和開發人員監控 MySQL 的技術性能。


“mysql”數據庫保存了 MySQL 數據庫服務器運行時需要的系統信息,比如數據文件夾、當前使用的字符集、約束檢查信息,等等

為什么 Workbench 里面我們只能看到“demo”和“sys”這 2 個數據庫呢?

這是因為,Workbench 是圖形化的管理工具,主要面向開發人 員,“demo”和“sys”這 2 個數據庫已經夠用 了。如果有特殊需求,比如,需要監控 MySQL 數據庫各項性能指標、直接操作 MySQL 數據庫系統文件等,可以由 DBA 通過 SQL 語句,查看其它的系統數據庫。

2、創建自己的數據庫

create database 數據庫名;
#創建atguigudb數據庫,該名稱不能與已經存在的數據庫重名。
create database atguigudb;

3、使用自己的數據庫

use 數據庫名;
#使用atguigudb數據庫
use atguigudb;

說明:如果沒有使用use語句,后面針對數據庫的操作也沒有加“數據名”的限定,那么會報“ERROR 1046(3D000): No database selected”(沒有選擇數據庫)

使用完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(值列表);直接插入多條數據(用,隔開)
insert into student values(1,'張三'),(2,'李四'),(3,'王五');將表student全部數據導入表stu
insert into stu select *from student;新的插入方式
insert into 表名 set eid=4,ename='趙六',deptid=1004,salary=8000;

8、查看表的創建信息

show create table 表名稱\G
每條命令以 ; 或 \g 或 \G 結束(\G有將顯示按列排序作用)#查看student表的詳細創建信息
show create table student\G
#結果如下
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)

上面的結果顯示student的表格的默認字符集是“latin1”不支持中文。

9、查看數據庫的創建信息

show create database 數據庫名\G#查看atguigudb數據庫的詳細創建信息
show create database atguigudb\G
*************************** 1. row ***************************Database: atguigudb
Create Database: CREATE DATABASE `atguigudb` /*!40100 DEFAULT 
CHARACTER SET latin1 */ 1 row in set (0.00 sec)

面的結果顯示atguigudb數據庫也不支持中文,字符集默認是latin1。

10、刪除表格

drop table 表名稱;#刪除學生表
drop table student;

4.2 MySQL的編碼設置

MySQL5.7中

問題再現:命令行操作sql亂碼問題

mysql> INSERT INTO t_stu VALUES(1,'張三','男');ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 
'sname'
at row 1

問題解決

步驟1:查看編碼命令

show variables like 'character_%';
show variables like 'collation_%';

步驟2:修改mysql的數據目錄下的my.ini配置文件

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

[mysqld] # 大概在76行左右,在其下添加 ...
character-set-server=utf8 collation-server=utf8_general_ci

Caution
注意:建議修改配置文件使用notepad++等高級文本編輯器,使用記事本等軟件打開修改后可能會導致文件編碼修改為“含BOM頭”的編碼,從而服務重啟失敗。

步驟3:重啟服務

步驟4:查看編碼命令

show variables like 'character_%';
show variables like 'collation_%';

如果是以上配置就說明對了。接著我們就可以新創建數據庫、新創建數據表,接著添加包含中文的 數據了。

MySQL8.0中

在MySQL 8.0版本之前,默認字符集為latin1,utf8字符集指向的是utf8mb3。網站開發人員在數據庫設計的時候往往會將編碼修改為utf8字符集。如果遺忘修改默認的編碼,就會出現亂碼的問題。從MySQL8.0 開始,數據庫的默認編碼改為 utf8mb4 ,從而避免了上述的亂碼問題。

4.3 MySQL 字符集

MySQL字符集包括字符集(CHARACTER)和校對規則(COLLATION)兩個概念:

latin1支持西歐字符、希臘字符等

gbk支持中文簡體字符

big5支持中文繁體字符

utf8幾乎支持世界所有國家的字符。

使用MySQL命令 ?SHOW VARIABLES like 'character%';

使用MySQL命令“SHOW COLLATION;”即可查看當前MySQL服務實例支持的字符序。

MySQL字符序命名規則是:以字符序對應的字符集名稱開頭,以國家名居中(或以general居中),以ci、cs或bin結尾。

ci表示大小寫不敏感,cs表示大小寫敏感,bin表示按二進制編碼值比較。

5. MySQL圖形化管理工具

MySQL圖形化管理工具極大地方便了數據庫的操作與管理,常用的圖形化管理工具有:MySQL
Workbench、phpMyAdmin、Navicat Preminum、MySQLDumper、SQLyog、dbeaver、MySQL
ODBC Connector。

工具1. MySQL Workbench

MySQL官方提供的圖形化管理工具MySQL Workbench完全支持MySQL 5.0以上的版本。MySQL
Workbench 分為社區版和商業版,社區版完全免費,而商業版則是按年收費。

MySQL Workbench 為數據庫管理員、程序開發者和系統規劃師提供可視化設計、模型建立、以及數據庫管理功能。它包含了用于創建復雜的數據建模ER模型,正向和逆向數據庫工程,也可以用于執行通常需要花費大量時間的、難以變更和管理的文檔任務。

下載地址:http://dev.mysql.com/downloads/workbench/。

使用:
首先,我們點擊 Windows 左下角的“開始”按鈕,如果你是 Win10 系統,可以直接看到所有程序。接著, 找到“MySQL”,點開,找到“MySQL Workbench 8.0 CE”。點擊打開 Workbench,如下圖所示:

左下角有個本地連接,點擊,錄入 Root 的密碼,登錄本地 MySQL 數據庫服務器,如下圖所示:

這是一個圖形化的界面,我來給你介紹下這個界面。

  • 上方是菜單。左上方是導航欄,這里我們可以看到 MySQL 數據庫服務器里面的數據庫,包括數據表、視圖、存儲過程和函數;左下方是信息欄,可以顯示上方選中的數據庫、數據表等對象的信息。
  • 中間上方是工作區,你可以在這里寫 SQL 語句,點擊上方菜單欄左邊的第三個運行按 鈕,就可以執行工作區的 SQL 語句了。
  • 中間下方是輸出區,用來顯示 SQL 語句的運行情況,包括什么時間開始運行的、運行的內容、運行的輸出,以及所花費的時長等信息。

工具2. Navicat

Navicat MySQL是一個強大的MySQL數據庫服務器管理和開發工具。它可以與任何3.21或以上版本的MySQL一起工作,支持觸發器、存儲過程、函數、事件、視圖、管理用戶等,對于新手來說易學易用。其精心設計的圖形用戶界面(GUI)可以讓用戶用一種安全簡便的方式來快速方便地創建、組織、訪問和共享信息。Navicat支持中文,有免費版本提供。

下載地址:http://www.navicat.com/。

工具3. SQLyog

SQLyog 是業界著名的 Webyog 公司出品的一款簡潔高效、功能強大的圖形化 MySQL 數據庫管理工具。這款工具是使用C++語言開發的。該工具可以方便地創建數據庫、表、視圖和索引等,還可以方便地進行插入、更新和刪除等操作,同時可以方便地進行數據庫、數據表的備份和還原。該工具不僅可以通過SQL文件進行大量文件的導入和導出,還可以導入和導出XML、HTML和CSV等多種格式的數據。 下載地址:http://www.webyog.com/,讀者也可以搜索中文版的下載地址。

工具4:dbeaver

DBeaver是一個通用的數據庫管理工具和 SQL 客戶端,支持所有流行的數據庫:MySQL、
PostgreSQL、 SQLite、Oracle、DB2、SQL Server、 Sybase、MS Access、Teradata、 Firebird、Apache Hive、Phoenix、 Presto等。DBeaver比大多數的SQL管理工具要輕量,而且支持中文界面。DBeaver社區版作為一個免費開源的產品,和其他類似的軟件相比,在功能和易用性上都毫不遜色。

唯一需要注意是 DBeaver 是用Java編程語言開發的,所以需要擁有 JDK(Java Development ToolKit)環境。如果電腦上沒有JDK,在選擇安裝DBeaver組件時,勾選“Include Java”即可。

下載地址:https://dbeaver.io/download/

可能出現連接問題:

有些圖形界面工具,特別是舊版本的圖形界面工具,在連接MySQL8時出現“Authentication plugin
'caching_sha2_password' cannot be loaded”錯誤。

出現這個原因是MySQL8之前的版本中加密規則是mysql_native_password,而在MySQL8之后,加密規則是caching_sha2_password。解決問題方法有兩種,第一種是升級圖形界面工具版本,第二種是把MySQL8 用戶登錄密碼加密規則還原成mysql_native_password。

第二種解決方案如下,用命令行登錄MySQL數據庫之后,執行如下命令修改用戶密碼加密規則并更新用戶密碼,這里修改用戶名為“root@localhost”的用戶密碼規則為“mysql_native_password”,密碼值為“123456”,如圖所示。

#使用mysql數據庫
USE mysql; ?#修改'root'@'localhost'用戶的密碼規則和密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'abc123';#刷新權限
FLUSH PRIVILEGES;

6. MySQL目錄結構與源碼

6.1 主要目錄結構

MySQL的目錄結構說明
bin目錄所有MySQL的可執行文件。如:mysql.exe
MySQLInstanceConfig.exe數據庫的配置向導,在安裝時出現的內容
data目錄系統數據庫所在的目錄
my.ini文件MySQL的主要配置文件
c:\ProgramData\MySQL\MySQL Server 8.0\data\用戶創建的數據庫所在的目錄

6.2 MySQL 源代碼獲取

首先,你要進入 MySQL下載界面。 這里你不要選擇用默認的“Microsoft Windows”,而是要通過下拉欄, 找到“Source Code”,在下面的操作系統版本里面, 選擇 Windows(Architecture
Independent),然后點擊下載。

接下來,把下載下來的壓縮文件解壓,我們就得到了 MySQL 的源代碼。

MySQL 是用 C++ 開發而成的,我簡單介紹一下源代碼的組成。

mysql-8.0.22 目錄下的各個子目錄,包含了 MySQL 各部分組件的源代碼:

  • sql 子目錄是 MySQL 核心代碼;
  • libmysql 子目錄是客戶端程序 API;
  • mysql-test 子目錄是測試工具;
  • mysys 子目錄是操作系統相關函數和輔助函數;

源代碼可以用記事本打開查看,如果你有 C++ 的開發環境,也可以在開發環境中打開查看。

如上圖所示,源代碼并不神秘,就是普通的 C++ 代碼,跟你熟悉的一樣,而且有很多注釋,可以幫助你理解。閱讀源代碼就像在跟 MySQL 的開發人員對話一樣,十分有趣。

7. 常見問題的解決

問題1:root 用戶密碼忘記,重置的操作

方法一:

1: 通過任務管理器或者服務管理,關掉mysqld(服務進程)
2: 通過命令行+特殊參數開啟mysqld mysqld --defaults-
file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.ini" --skip-grant-tables
3: 此時,mysqld服務進程已經打開。并且不需要權限檢查
4: mysql -uroot 無密碼登陸服務器。另啟動一 個客戶端進行
5: 修改權限表
(1) use mysql;
(2)update user set authentication_string=password('新密 碼') where 
user='root' and Host='localhost';
(3)flush privileges;
6: 通過任務管理器,關掉mysqld服務進程。
7: 再次通過服務管理,打開mysql服務。
8: 即可用修改后的新密碼登陸。

方法二:

通用方法--啟動時跳過權限表1> 停止數據庫
C:\Users\Administrator>net stop mysql
MySQL 服務正在停止..
MySQL 服務已成功停止。
2> 啟動時跳過權限表
mysqld --console --skip-grant-tables --shared-memoryC:\Users\Administrator>mysqld --console --skip-grant-tables --shared-
memory
2024-05-09T02:10:48.290981Z 0 [System] [MY-010116] [Server]
F:\mysql\mysql-8.0.36-winx64\bin\mysqld.exe (mysqld 8.0.36) starting as process
5344
2024-05-09T02:10:48.318791Z 1 [System] [MY-013576] [InnoDB] InnoDB
initialization has started.
2024-05-09T02:10:49.700249Z 1 [System] [MY-013577] [InnoDB] InnoDB
initialization has ended.
2024-05-09T02:10:51.926542Z 0 [Warning] [MY-011311] [Server] Plugin
mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be
accessible'
2024-05-09T02:10:52.119615Z 0 [Warning] [MY-010068] [Server] CA
certificate ca.pem is self signed.
2024-05-09T02:10:52.119846Z 0 [System] [MY-013602] [Server] Channel
mysql_main configured to support TLS. Encrypted connections are now supported for
this channel.
2024-05-09T02:10:52.215835Z 0 [System] [MY-010931] [Server]
F:\mysql\mysql-8.0.36-winx64\bin\mysqld.exe: ready for connections. Version:
'8.0.36' socket: '' port: 0 MySQL Community Server - GPL.注意:不要關閉中斷3> 重新開啟新的終端,登錄并設置新密碼
PS C:\Users\Administrator> mysql -uroot -p
Enter password: 直接敲回車鍵
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.36 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)
mysql> alter user root@localhost identified by '123456';
Query OK, 0 rows affected (0.02 sec)4> 退出MySQL,關閉第一個終端,正常啟動服務。
mysql> \q
Bye
PS C:\Users\Administrator> net start mysql
MySQL 服務正在啟動 ..
MySQL 服務已經啟動成功。
PS C:\Users\Administrator> mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be
insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> \q
Bye

方法三:

參考官方文檔1> 停止服務
PS C:\Users\Administrator> net stop mysql
MySQL 服務正在停止.
MySQL 服務已成功停止。
2> 創建一個文本文件,內如如下,保存為 mysql_init.txt
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
3> 啟動同時使用上一步文件修改密碼
要求管理員身份打開cmd來運行命令,暫時不要關閉終端:
C:\Users\Administrator>mysqld --init-file=F:\mysql\mysql-8.0.36-
winx64\mysql_init.txt
4> 打開另一個終端,登錄測試
PS C:\Users\Administrator> mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can
be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.36 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> \q
Bye
5> 關閉第一個終端,正常啟動服務。
C:\Users\Administrator>mysqld --init-file=F:\mysql\mysql-8.0.36-
winx64\mysql_init.txt
^C
C:\Users\Administrator>net start mysql
MySQL 服務正在啟動 ..
MySQL 服務已經啟動成功。
C:\Users\Administrator>mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can
be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> \q
Bye
6> 刪除文件 mysql_init.tx

問題2:mysql 命令報不是內部或外部命令

如果輸入mysql命令報“不是內部或外部命令”,把mysql安裝目錄的bin目錄配置到環境變量path中。如下:

問題3:錯誤 ERROR :沒有選擇數據庫就操作表格和數據

ERROR 1046 (3D000): No database selected
解決方案一:就是使用“USE 數據庫名;”語句,這樣接下來的語句就默認針對這個數據庫進行操作
解決方案二:就是所有的表對象前面都加上“數據庫.”

問題4:命令行客戶端的字符集問題

mysql> INSERT INTO t_stu VALUES(1,'張三','男');ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for 
column 'sname' at row 1

原因:服務器端認為你的客戶端的字符集是utf-8,而實際上你的客戶端的字符集是GBK。

查看所有字符集:SHOW VARIABLES LIKE 'character_set_%';

解決方案,設置當前連接的客戶端字符集 “SET NAMES GBK;”

問題5:修改數據庫和表的字符編碼

修改編碼:
(1)先停止服務

(2)修改my.ini文件

(3)重新啟動服務

說明:
如果是在修改my.ini之前建的庫和表,那么庫和表的編碼還是原來的Latin1,要么刪了重建,要么使用alter語句修改編碼。

mysql> create database 0728db charset Latin1;Query OK, 1 row affected (0.00 sec)mysql> use 0728db; Database changed
mysql> create table student (id int , name varchar(20)) charset Latin1; Query OK,
0 rows affected (0.02 sec)mysql> show create table student\G
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)mysql> alter table student charset utf8; #修改表字符編碼為UTF8 Query OK, 0 rows
affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) CHARACTER SET latin1 DEFAULT NULL, ?#字段仍然是latin1編碼
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> alter table student modify name varchar(20) charset utf8; #修改字段字符編碼為
UTF8 Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table student\G
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> show create database 0728db;;
+--------+-----------------------------------------------------------------+
|Database| Create Database ? ? ? ? ? ? ? ? ? ? ? ? |
+------+-------------------------------------------------------------------+
|0728db| CREATE DATABASE `0728db` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter database 0728db charset utf8; #修改數據庫的字符編碼為utf8 Query OK, 1
row affected (0.00 sec)
mysql> show create database 0728db;
+--------+-----------------------------------------------------------------+
|Database| Create Database ? ? ? ? ? ? ? ? ? ? ? ? |
+--------+-----------------------------------------------------------------+
| 0728db | CREATE DATABASE `0728db` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43414.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43414.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43414.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

16 - Python語言進階

Python語言進階 數據結構和算法 算法:解決問題的方法和步驟 評價算法的好壞:漸近時間復雜度和漸近空間復雜度。 漸近時間復雜度的大O標記: - 常量時間復雜度 - 布隆過濾器 / 哈希存儲 - 對數時間復雜度 - 折半查找(二分查找&am…

關于TCP的三次握手流程

三次握手流程 第一次握手:客戶端向服務端發起建立連接請求,客戶端會隨機生成一個起始序列號x,客戶端向服務端發送的字段包含標志位SYN1,序列號segx。第一次握手后客戶端的狀態為SYN-SENT。此時服務端的狀態為LISTEN 第二次握手&…

使用耳機殼UV樹脂制作私模定制耳塞的價格如何呢?

使用耳機殼UV樹脂制作私模定制耳塞的價格如何呢? 耳機殼UV樹脂制作私模定制耳塞的價格因多個因素而異,如材料、工藝、設計、定制復雜度等。 根據我目前所了解到的信息,使用UV樹脂制作私模定制耳塞的價格可能在數百元至數千元不等。具體價格…

LVS+Nginx高可用集群---Nginx進階與實戰

1.Nginx中解決跨域問題 兩個站點的域名不一樣,就會有一個跨域問題。 跨域問題:了解同源策略:協議,域名,端口號都相同,只要有一個不相同那么就是非同源。 CORS全稱Cross-Origin Resource Sharing&#xff…

大模型知識大全1-基礎知識【大模型】

文章目錄 大模型簡介以后的介紹流程基礎知識訓練流程介紹pre-train對齊和指令微調規模拓展涌現能力 系統學習大模型的記錄https://github.com/LLMBook-zh/LLMBook-zh.github.io 大模型簡介 歷史我就不寫了,簡單說說大模型的應用和特點。人類使用大模型其實分為兩個…

linux高級編程(OSI/UDP(用戶數據報))

OSI七層模型: OSI 模型 --> 開放系統互聯模型 --> 分為7層: 理想模型 --> 尚未實現 1.應用層 QQ 應用程序的接口 2.表示層 加密解密 gzip 將接收的數據進行解釋&#xff…

【shell】—雙引號引用變量

文章目錄 一、舉例—單、雙引號引用變量的結果差異二、使用雙引號引用變量的場景1、使用雙引號—可以防止字符串被分割2、使用雙引號—特殊字符變為普通字符3、使用雙引號—保存原始命令的輸出格式4、使用雙引號—具有強約束的單引號變為普通單引號字符5、注意 一、舉例—單、雙…

挑戰杯 opencv python 深度學習垃圾圖像分類系統

0 前言 🔥 優質競賽項目系列,今天要分享的是 🚩 opencv python 深度學習垃圾分類系統 🥇學長這里給一個題目綜合評分(每項滿分5分) 難度系數:3分工作量:3分創新點:4分 這是一個較為新穎的競…

昇思25天學習打卡營第13天|應用實踐之ResNet50遷移學習

基本介紹 今日的應用實踐的模型是計算機實踐領域中十分出名的模型----ResNet模型。ResNet是一種殘差網絡結構,它通過引入“殘差學習”的概念來解決隨著網絡深度增加時訓練困難的問題,從而能夠訓練更深的網絡結構。現很多網絡極深的模型或多或少都受此影響…

數據鏈路層(超詳細)

引言 數據鏈路層是計算機網絡協議棧中的第二層,位于物理層之上,負責在相鄰節點之間的可靠數據傳輸。數據鏈路層使用的信道主要有兩種類型:點對點信道和廣播信道。點對點信道是指一對一的通信方式,而廣播信道則是一對多的通信方式…

算法工程師第五天(● 哈希表理論基礎 ● 242.有效的字母異位詞 ● 349. 兩個數組的交集 ● 202. 快樂數● 1. 兩數之和 )

參考文獻 代碼隨想錄 一、有效的字母異位詞 給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的字母異位詞。 注意:若 s 和 t 中每個字符出現的次數都相同,則稱 s 和 t 互為字母異位詞。 示例 1: 輸入: s "anagram", …

風險評估:Tomcat的安全配置,Tomcat安全基線檢查加固

「作者簡介」:冬奧會網絡安全中國代表隊,CSDN Top100,就職奇安信多年,以實戰工作為基礎著作 《網絡安全自學教程》,適合基礎薄弱的同學系統化的學習網絡安全,用最短的時間掌握最核心的技術。 這一章節我們需…

grafana數據展示

目錄 一、安裝步驟 二、如何添加喜歡的界面 三、自動添加注冊客戶端主機 一、安裝步驟 啟動成功后 可以查看端口3000是否啟動 如果啟動了就在瀏覽器輸入IP地址:3000 賬號密碼默認是admin 然后點擊 log in 第一次會讓你修改密碼 根據自定義密碼然后就能登錄到界面…

高職物聯網實訓室

一、高職物聯網實訓室建設背景 隨著《中華人民共和國國民經濟和社會發展第十四個五年規劃和2035年遠景目標綱要》的發布,中國正式步入加速數字化轉型的新時代。在數字化浪潮中,物聯網技術作為連接物理世界與數字世界的橋梁,其重要性日益凸顯…

Golang | Leetcode Golang題解之第224題基本計算器

題目&#xff1a; 題解&#xff1a; func calculate(s string) (ans int) {ops : []int{1}sign : 1n : len(s)for i : 0; i < n; {switch s[i] {case :icase :sign ops[len(ops)-1]icase -:sign -ops[len(ops)-1]icase (:ops append(ops, sign)icase ):ops ops[:len(o…

Knife4j的原理及應用詳解(三)

本系列文章簡介&#xff1a; 在當今快速發展的軟件開發領域&#xff0c;API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;作為不同軟件應用之間通信的橋梁&#xff0c;其重要性日益凸顯。隨著微服務架構的興起&#xff0c;API的數量…

價值投資者什么時候賣出股票?

經常有人說&#xff0c;會買的只是徒弟&#xff0c;會賣的才是師傅。 在閱讀《戰勝華爾街》的過程中&#xff0c;也多次感受到林奇先生的賣出邏輯&#xff0c;當股票的價格充分體現了公司的價值的時候&#xff0c;就是該賣出股票的時候。但這只是理論上的&#xff0c;從林奇先…

數據中臺指標管理系統

您所描述的是一個數據中臺指標管理系統&#xff0c;它基于Spring Cloud技術棧構建。數據中臺是企業數據管理和應用的中心平臺&#xff0c;它整合了企業內外部的數據資源&#xff0c;提供數據服務和數據管理能力。以下是您提到的各個模塊的簡要概述&#xff1a; 1. **首頁**&am…

JSP WEB開發(四) MVC模式

MVC模式介紹 MVC&#xff08;Model-View-Controller&#xff09;是一種軟件設計模式&#xff0c;最早出現在Smalltalk語言中&#xff0c;后來在Java中得到廣泛應用&#xff0c;并被Sun公司推薦為Java EE平臺的設計模式。它把應用程序分成了三個核心模塊&#xff1a;模型層、視…