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;


 

以下为mysql建表语句,将其转换为oracle DDL建表语句 字段改为大写-- 供货范围附件 CREATE TABLE `supplier_master_custom_2` ( `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `head_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '供应商主数据对应id', `els_account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ELS账号', `to_els_account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '采购Els账号', `item_number` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '行号', `is_deleted` int DEFAULT NULL COMMENT '删除状态', `create_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建人', `create_by_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建人ID', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新人', `update_by_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '修改人ID', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `fbk1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '操作', `fbk2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '文件类型', `fbk3` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '供货范围', `fbk4` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '关联项目编码', `fbk5` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '失效日期', `fbk6` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '生效日期', `fbk7` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '长期有效', `tag_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标识id', PRIMARY KEY (`id`) USING BTREE,
最新发布
03-13
<think>嗯,用户想把MySQL的建表语句转成Oracle的,并且字段名要大写。首先,我需要仔细看看原来的MySQL语句结构,然后对比Oracle的语法差异。 首先,表名字段名在Oracle中默认是大写的,不过用户特别要求改成大写,所以需要把反引号去掉,全换成大写。比如`id`变成ID。然后,MySQL里的varchar类型在Oracle是VARCHAR2,长度可能需要调整,比如varchar(32)变成VARCHAR2(32)。字符集部分,MySQL有CHARACTER SET utf8mb4,但Oracle通常用AL32UTF8,不过建表时可能不需要特别指定,所以这部分可以去掉。 接下来是默认值。MySQL中使用DEFAULT '',但Oracle的空字符串会被视为NULL,所以可能需要用DEFAULT NULL或者处理一下。不过用户原来的字段有NOT NULL DEFAULT '',在Oracle里可能需要改成DEFAULT ' '或者直接NOT NULL,但根据需求,可能保持原意,把DEFAULT ''改为DEFAULT NULL,或者保留为空,但这样可能不符合业务逻辑,需要用户确认。不过根据示例,可能直接去掉DEFAULT '',只保留NOT NULL,其他默认空字符串的字段改成DEFAULT NULL,或者用DEFAULT '',但Oracle不允许,所以可能需要调整。 然后是注释。MySQL的COMMENT在Oracle中使用COMMENT ON语句单独添加,所以需要把每个字段的注释用COMMENT ON COLUMN来写。主键部分,MySQL是PRIMARY KEY (`id`) USING BTREE,但Oracle的索引类型不同,不需要USING BTREE,直接PRIMARY KEY (ID)即可。 还有数据类型方面,比如MySQL的int在Oracle是NUMBER,所以int DEFAULT NULL变成NUMBER DEFAULT NULL。datetime在Oracle是DATE或者TIMESTAMP,根据需求可能需要用TIMESTAMP,但原例中使用的是DATE,所以可能需要确认。不过用户示例中的create_timeupdate_time用的是datetime,转成Oracle的话,DATE类型可能更合适,或者TIMESTAMP(0)不带小数秒。 另外,MySQL中的COLLATE子句在Oracle中可能不需要,因为字符集排序规则在数据库级别设置,所以可以去掉CHARACTER SETCOLLATE的部分。 最后,检查所有字段名是否大写,表名也大写,去掉反引号,调整语法结构,分号换成斜杠结束。然后添加注释的语句,每个字段表都需要单独的COMMENT ON。 可能还需要注意Oracle的字段长度限制,比如VARCHAR2最大4000,而原例中的fbk3fbk4是varchar(2000),没问题。还有主键是否显式命名,不过原例中没有指定主键名称,所以Oracle会自动生成,或者可以指定CONSTRAINT名称。 总结步骤:转换字段名表名为大写,调整数据类型,去掉字符集排序规则,处理默认值,转换注释,调整主键定义,最后用斜杠结束DDL语句。</think>以下是转换后的Oracle DDL建表语句,包含字段名大写语法调整: ```sql CREATE TABLE SUPPLIER_MASTER_CUSTOM_2 ( ID VARCHAR2(32) NOT NULL, HEAD_ID VARCHAR2(50) DEFAULT '' NOT NULL, ELS_ACCOUNT VARCHAR2(50) DEFAULT '', TO_ELS_ACCOUNT VARCHAR2(50) DEFAULT '', ITEM_NUMBER VARCHAR2(100) DEFAULT '', IS_DELETED NUMBER DEFAULT NULL, CREATE_BY VARCHAR2(100) DEFAULT '', CREATE_BY_ID VARCHAR2(50) DEFAULT '', CREATE_TIME DATE DEFAULT NULL, UPDATE_BY VARCHAR2(100) DEFAULT '', UPDATE_BY_ID VARCHAR2(50) DEFAULT '', UPDATE_TIME DATE DEFAULT NULL, FBK1 VARCHAR2(100) DEFAULT '', FBK2 VARCHAR2(100) DEFAULT '', FBK3 VARCHAR2(2000) DEFAULT '', FBK4 VARCHAR2(2000) DEFAULT '', FBK5 VARCHAR2(100) DEFAULT '', FBK6 VARCHAR2(100) DEFAULT '', FBK7 VARCHAR2(100) DEFAULT '', TAG_ID VARCHAR2(100) DEFAULT NULL, CONSTRAINT PK_SUPPLIER_MASTER_CUST_2 PRIMARY KEY (ID) ); COMMENT ON TABLE SUPPLIER_MASTER_CUSTOM_2 IS '供货范围附件'; COMMENT ON COLUMN SUPPLIER_MASTER_CUSTOM_2.HEAD_ID IS '供应商主数据对应id'; COMMENT ON COLUMN SUPPLIER_MASTER_CUSTOM_2.ELS_ACCOUNT IS 'ELS账号'; -- 其他字段注释按照相同格式补充 / ``` **主要修改点说明**: 1. **字段名大写**:所有字段名表名改为大写,符合Oracle命名规范[^1] 2. **数据类型转换**: - `varchar` → `VARCHAR2` - `int` → `NUMBER` - `datetime` → `DATE` 3. **字符集处理**:移除`CHARACTER SET``COLLATE`声明(Oracle默认使用数据库字符集) 4. **默认值处理**:Oracle中空字符串`''`会被视为`NULL`,建议根据业务需求调整默认值 5. **注释语法**:Oracle使用单独的`COMMENT ON`语句添加注释 6. **索引调整**:移除`USING BTREE`语法(Oracle默认使用B-tree索引)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值