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 databasebase;+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| base | CREATE DATABASE `base` /*!40100 DEFAULT CHARACTER SET utf8*/ |
+----------+-------------------------------------------------------------------+
4、查看表的数据库编码
mysql> show create tablebase_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 existsbase_auth_user_group;create tablebase_auth_user_group(
dbidbigint(20) not null auto_increment primary key comment '物理主键',user_id char(36) not null comment '用户表id',
group_idchar(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_IDFROMBASE_AUTH_USER_GROUP UGJOIN BASE_AUTH_PERM_GROUP PG ON UG.GROUP_ID =PG.GROUP_ID
;