我的系统是ubuntu18.04,今天向数据库中插入中文数据的时候,发现无法插入中文,既然如此,那一定是编码的问题了,那就设置一下编码吧。
mysql –u root –p
mysql> show variables like 'character%';
发现居然有latin1编码的,当然要改掉啦
配置文件在/etc/mysql下的my.cnf(windows下的话配置文件是my.ini)(可以使用find命令查找一哈,find / -name my.cnf)也或许在/etc/mysql/mysql.conf.d/mysqld.cnf中,找到就是啦,
直接SQL语句更改编码
mysql> set character_set_client=utf8;
mysql> set character_set_connection=utf8;
mysql> set character_set_database=utf8;
mysql> set character_set_results=utf8;
mysql> set character_set_server=utf8;
mysql> set character_set_system=utf8;
mysql> set collation_connection=utf8;
mysql> set collation_database=utf8;
mysql> set collation_server=utf8;
然后打开配置文件,添加:
character-set-server=utf8
init connect=’SET NAMES utf8’
重启
重启mysql,两种方式
sudo service mysql restart
sudo /etc/init.d/mysql restart
再次mysql –u root –p
mysql> show variables like 'character%';
查看一下
Latin1改成utf8就可,然后前端web用utf8编码,就可以正常输入数据库了。
如果数据库、表已经建好,可以查看修改数据库、表的编码:
mysql> show create database <数据库名称>;
mysql> show create table <表名称>;
mysql>alter database <数据库名称> character set utf8;
mysql>alter table <表名称> character set utf8;
表里已经有数据啦,表不能输入汉字的解决方案
alter table <表名称> CONVERT TO CHARACTER SET utf8;
然后就可以插入中文数据了,撒花***
这里附一些常用的操作数据库的命令以及一些需要注意的点,人老了,一段时间不用,就忘了,总结一下嘻嘻:
1、查看默认mysql数据库及表编码格式
mysql> show variables like 'character%';
mysql> show variables like 'character_set_database';
2、查看数据库、表的编码格式
mysql> show create database <数据库名称>;
mysql> show create table <表名称>;
3、查看表的具体的信息
mysql> desc <表名称>;
4、查看有哪些数据库
mysql>show databases;
5、选择数据库
mysql>use <数据库名>;
6、查看当前用户打开的数据库
mysql>select database();
7、创建表(可以选择默认编码)
mysql>create table test(
->id int not null,
->name varchar(20),
->primary key(id)
->) default charset=utf8;
8、修改数据库和表的编码
mysql>alter database <数据库名> character set utf8;
mysql>alter table <表名> character set utf8;
9、查看有哪些表
mysql>show tables;
10、向表中插入数据
mysql>insert into test(id,name) values(1,’zhangsan’);
mysql>insert into test values(2,’wangwu’);
mysql>insert into test(id) values(3);
11、查看表中数据
mysql>select * from test;
mysql>select id from test;
mysql>select * from test limit 10;
mysql>select count(id) from test;
mysql>select sum(id) from test;
mysql>select id from test where name=’zhangsan’;
等等使用方法
12、自动增长编号1、2、3、4…
自动编号(AUTO_INCREMENT),必须与主键组合使用
创建表的时候
mysql>create table test(
->id int not null auto_increment primary key,
->name varchar(20)
->);
13、主键(PRIMARY KEY)可以保证属性的唯一性,UNIQUE KEY也可以
14、删除表中数据
mysql>delete from <表名> where id=1;
mysql>delete from <表名>;
15、删除表或数据库
mysql>drop table <表名>;
mysql>drop database <数据库名>;
16、创建数据库
mysql>create database <数据库名>;
17、定义外键
mysql> create table <表B名称>(
->id int not null auto_increment primary key,
->name varchar(20),
->key ‘fk_id’ (‘name’),
->constraint ‘fk_id’ foreign key (‘name’) references ‘<表A名称>’ (‘username’)
->);
18、添加与删除外键
mysql> alter table <表名> add constraint <外键名> foreign key<字段名> REFERENCES <外表表名><字段名>;
mysql> alter table <表名> drop foreign key <外键名>;
19、修改表(alter的用法总结)
删除、增加列
mysql>ALTER TABLE <表名字> DROP <列名称>;
mysql>ALTER TABLE <表名字> ADD <列名称> INT NOT NULL COMMENT '注释说明';
修改列的类型信息
mysql>ALTER TABLE <表名字> CHANGE <列名称><列名称> varchar(20) NOT NULL COMMENT '注释说明';
重命名列
mysql>ALTER TABLE <表名字> CHANGE <列名称><新列名称> varchar(20) COMMENT '注释说明';
重命名表
mysql>ALTER TABLE <表名字> RENAME <表新名字>;
删除表中主键
mysql>Alter TABLE <表名字> drop primary key;
添加主键
mysql>ALTER TABLE <表名字> ADD CONSTRAINT <主键名> PRIMARY KEY <字段名>;
添加索引
mysql>ALTER TABLE <表名字> add index INDEX_NAME <索引名>;
添加唯一限制条件索引
mysql>ALTER TABLE <表名字> add unique emp_name2(cardnumber);
删除索引
mysql>alter table <表名字> drop index <索引名>;
20、mysql查询的关键词的执行顺序
书写顺序:select->from->where->group by->having->order by
执行顺序:from->where->group by->having->select->order by
from:需要从哪个数据表检索数据
where:过滤表中数据的条件
group by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
order by :按照什么样的顺序来查看返回的数据
21、mysql中的where和having的区别
这个就很简单啦,可能初学不是很清楚,其实光从这两个词的含义就可以明白了
having是只能从选出的字段中添加过滤条件,而没有选出的字段就不可以添加过滤条件。
where既可以从select出的字段中添加过滤条件,也可以将未选出的字段、但是数据表中有的字段作为过滤条件
给个例子吧:
(1)where和having都可以使用的场景
select addtime,name from dw_users where addtime> 1500000000
select addtime,name from dw_users having addtime> 1500000000
解释:上面的having可以用的前提是已经筛选出了addtime字段,在这种情况下和where的效果是等效的。
(2)只可以用where,不可以用having的情况
select name from dw_users where addtime> 1500000000//没问题,可以使用
select phone,name from dw_users having addtime> 1500000000//报错!!!因为前面并没有筛选出addtime字段
(3) 只可以用having,不可以用where情况
select category_id , avg(price) as ag from dw_goods group by goods_category having ag > 100
//没问题,可以使用
select category_id , avg(price) as ag from dw_goods where ag>100 group by goods_category
//报错!!因为from dw_goods 这张数据表里面没有ag这个字段
好啦,以上就是对数据库操作的小结了!!!
顺便mark一下配置数据库远程连接:
1、登录数据库
mysql –u root -p
2、use mysql
3、创建用户同时授权
mysql>grant all privileges on *.* to root@% identified by ‘password’;
mysql>flush privileges;
4、查看一下有没有这个新的用户了
mysql>select Host,User from user;
5、重启mysql
sudo /etc/init.d/mysql restart
可以远程连接了,撒花*******