mysql数据库编码问题
数据库的编码格式不改成utf8,就算你在建表的时候使用utf8编码也是没有用的,还是乱码
进入数据库后,使用show variables like "char%"查看数据库的编码格式。
很有可能character_set_database和character_set_server的编码格式都是Latin1的,所以要进行更改。
大概说一下三种情况:我只做了第一种。
MariaDB
cd /etc/my.cnf.d
sudo vi client.cnf 加入下面这句话
default-character-set=utf8
sudo vi server.cnf 加入下面这句话
character-set-server=utf8
保存退出后,重启mysql生效
sudo systemctl restart mariadb
windows下的mysql
1、在mysql的安装目录下找到my.ini文件,在mysql5.7中是my-default文件。
2、在my.ini文件中找到[client]和[mysqld]字段,在下面均加上default-character-set=utf8,保存并关闭
3、重启mysql服务net stop mysql, net start mysql
在linux下的mysql
1、配置文件在/etc/mysql/my.cnf
2、在[client]和[mysqld]字段下面均添加default-character-set=utf8,保存并关闭
3、重启mysql服务 service mysql restart
在高版本5.5以上对字符编码方式修改的办法中,在[mysqld]下的修改发生了变化,正确方式如下:
[mysqld]下添加的应该为:
character-set-server=utf8
collation-server=utf8_general_ci
utf8和utf8mb4的区别
utf8mb4支持4字节的字符,支持emoji表情
MySQL中的 “utf8mb4” 才是 真正意义上的“UTF-8”。
MySQL的“utf8”是个“特殊的字符编码”。这种编码很多Unicode字符保存不了。
建议MySQL和MariaDB用户使用“utf8mb4”而不是“utf8”。
utf8_unicode_ci比较准确,utf8_general_ci速度比较快。
utf8mb4对应的就是utf8mb4_unicode_ci和utf8mb4_general_ci
datetime和timestamp的区别
我在mariaDB遇到了一个问题,我有个时间字段设置的是timestamp,我希望是自己填入值,没有值的时候就为空,但是它自动把我变成了default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,而且不能设置default null。设置成DEFAULT ‘0000-00-00 00:00:00′,又变成了当前时间
普通的mysql的情况,timestamp也是不能设置default null,但是设置DEFAULT ‘0000-00-00 00:00:00′,结果显示的就是这个了。
而datetime格式的话,不写默认值的话就是null,也可以也写default CURRENT_TIMESTAMP
对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。对于跨时区的业务,TIMESTAMP更为合适
其实,这个特性是自动初始化和自动更新(Automatic Initialization and Updating)。自动初始化指的是如果对该字段(譬如上例中的hiredate字段)没有显性赋值,则自动设置为当前系统时间。自动更新指的是如果修改了其它字段,则该字段的值将自动更新为当前系统时间。它与“explicit_defaults_for_timestamp”参数有关。默认情况下,该参数的值为OFF
模板
create table table_name
(
id int unsigned not null auto_increment comment '主键,自增长',
student_id int,
student_name varchar(200) COLLATE=utf8mb4_unicode_ci,
create_time TIMESTAMP default CURRENT_TIMESTAMP,
update_time TIMESTAMP default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
primary key (id),
key (student_id)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;