mysql解决无法插入中文或者中文乱码的问题

我的系统是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

 

可以远程连接了,撒花*******

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值