mysql的编码utf8,utf8mb4和timestamp,datetime

参考链接1  2

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;


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值