编码设置
查询编码
SHOW VARIABLES LIKE 'character_set_%';
建库建表时指定编码:
创建数据库时指定库编码:
create database databaseName default character set utf8 collate utf8_general_ci;
创建表时指定表编码:
create table tableName(
id int(32) primary key not null
)default charset=utf8;
创建表时指定表字段编码:
create table tableName(
id int(32) primary key not null,
`code` varchar(128) unique not null character set utf8 collate utf8_general_ci
)default charset=utf8;
当库和表的编码都设置后,表字段编码可以不用设置,反正我是这样理解的,不设置就默认使用表设置的编码。
mysql设置编码命令
注意:以下命令只在当前连接下有效,当重启数据库或新开连接后失效。想一劳永逸请在mysql配置文件中配置默认编码。
set character_set_client = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;/*这里要注意很有用*/
set character_set_server = utf8;
set collation_connection = utf8_bin;
set collation_database = utf8_bin;
set collation_server = utf8_bin;
mysql配置文件中配置默认编码
1、中止MySQL服务
2.1(Linux)、在/etc/下找到my.cnf,如果没有就把mysql的安装目录下的support-files目录(有的linux是安装目录的根目录)下的my-medium.cnf(或是my-large.cnf)复制到/etc/下并改名为my.cnf即可,这个步骤不同Linux版本会对应不用的目录和文件名。
2.2(Windows)、在安装根目录下找到my.ini,不可能没有。
3、打开my.cnf(或my.ini)以后修改成以下:
[client]
default-character-set=utf8
[mysqld]
#set the default character set.
character-set-server=utf8
character-set-client=utf8
collation-server=utf8_general_ci
#(注意1inux下mysq1安装完后是默认:表名区分大小写,列名不区分大小写;0:区分大小写,1:不区分大小写)
lower_case_table_names=1
#(设置最大连接数,默认为151, MySQL!服务器允许的最大连接数16384;)
max_connections=1000
init_connect='SET NAMES utf8'
[mysqld_safe]
default-character-set=utf8
[mysql]
default-character-set=utf8
4、启动MySQL服务
连接数据库设置编码
jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8
注意以上代码如果写在xml中由于&是xml中的字符实体,所以需要将&改成&
jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8
java与mysq编码对应关系
java中的常用编码UTF-8、GBK、GB2312、ISO-8859-1,对应mysql数据库中的编码utf8、gbk、gb2312、latin1。
utf8mb3和utf8mb4的区别
utf8mb3最多使用3个字节来表示一个字符,utf8mb4最多使用4个字节来表示一个字符。
utf8mb4能储存一些网络特殊字符(如emoji),utf8mb3不能。
mysql5.7及之前的版本utf8默认是utf8mb3,mysql5.7之后的版本utf8默认是utf8mb4。
collate
collate即排序规则,一个字符集可对应多个排序规则,一个排序规则只能对应一个字符集。
如utf8mb4_general_ci是和utf8mb4的排序规则之一,ci为Case Insensitive,即大小写不敏感,相反的utf8mb4_general_cs为Case Sensitive,即大小写敏感
数据库中涉及排序和比较的地方都会受到collate影响
查看数据库的所有collate:
show collation;