1、查询数据库编码
show variables like "%char%";
mysql> show variables like "%char%"; +--------------------------+----------------------------------------------------------+ | Variable_name | Value +--------------------------+----------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 --mysql客户端编码 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:\Java\Databases\MySQL\MySQL Server 5.0\share\charsets\ | +--------------------------+----------------------------------------------------------+
2、客户端乱码解决
因为操作系统是中文操作系统,默认使用的字符集是GB2312,所以需要修改一下:
set character_set_results=gb2312;注意作用是临时的
3、查看某个数据库编码
mysql> show create database base; +----------+-------------------------------------------------------------------+ | Database | Create Database | +----------+-------------------------------------------------------------------+ | base | CREATE DATABASE `base` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+-------------------------------------------------------------------+
4、查看表的数据库编码
mysql> show create table base_auth_group; +-----------------+---------------------------------------------- ----------------------------------------------------------------- | Table | Create Table +-----------------+---------------------------------------------- ----------------------------------------------------------------- | base_auth_group | CREATE TABLE `base_auth_group` ( `dbid` bigint(20) NOT NULL auto_increment COMMENT '物理主键', `id` char(36) NOT NULL COMMENT '业务主键', `name` varchar(32) NOT NULL COMMENT '分组名', `groupname` varchar(64) NOT NULL COMMENT '分组名称', `type` int(11) NOT NULL COMMENT '类型', `create_time` datetime default NULL COMMENT '创建时间', `modify_time` datetime default NULL COMMENT '修改时间', PRIMARY KEY (`dbid`), UNIQUE KEY `id` (`id`), UNIQUE KEY `groupname` (`groupname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户组表' +-----------------+------------------------------------------------ -------------------------------------------------------------------
5、程序调用编码乱码
错误:(Incorrect string value: '\xE8\xB6\x85\xE7\xBA\xA7...' for column 'name')
注意查看:信息输入路径:client→connection→server的编码;
使用:SET NAMES UTF8;
等价于:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
若以上编码统一后还是乱码,就需要查看创建表的编码;
6、执行sql脚本时乱码
也是需要先进行SET NAMES UTF8;编码统一
use test; 进入数据库
source test.sql;执行sql
注意:
创建数据库时,最好指定编码:CREATE DATABASE base DEFAULT CHARACTER SET utf8;
只要数据库创建制定好编码,其内新创建的编码都会与当前数据库编码一致;
7、最常用两个命令
use databaseName;选择数据库
show tables;查看数据库中所有表
8、DATETIME,DATE和TIMESTAMP
DATETIME类型是:年-月-日 时:分:秒 DATE类型是:年-月-日 TIMESTAMP是:可以默认为NULL,显示格式与DATETIME一样
虽然datetime与timestamp格式一样但是还是不同
datetime插入当前日期使用new();
timestamp插入当前日期使用 CURRENT_TIMESTAMP
若含有多个timestamp类型字段时,只能在第一个出先的字段使用“DEFAULT CURRENT_TIMESTAMP” ,只能用一次并且是第一个字段
9、创建表
drop table if exists base_auth_user_group; create table base_auth_user_group( dbid bigint(20) not null auto_increment primary key comment '物理主键', user_id char(36) not null comment '用户表id', group_id char(36) not null comment '分组表id', constraint unique (user_id, group_id) ) comment '用户和组映射表';
10、创建视图
CREATE OR REPLACE VIEW BASE_AUTH_PERM_USER AS SELECT DISTINCT USER_ID, PERMISSION_ID FROM BASE_AUTH_USER_GROUP UG JOIN BASE_AUTH_PERM_GROUP PG ON UG.GROUP_ID = PG.GROUP_ID ;