1、设置编码mysql
LINUX 修改vi/etc/my.cnfsql
WINDOWS my.ini数据库
在[client]下添加服务器
default-character-set=utf8 函数
在[mysqld]下添加post
default-character-set=utf8编码
保存,重启mysql便可;spa
2、建立对象时设置字符集命令行
1 建立数据库指定数据库的字符集code
mysql>CREATEDATABASE IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
2 建立表时指定字符集
CREATETABLE table_name (id int unsigned) DEFAULT CHARACTER SET utf8 COLLATEutf8_general_ci;
3 建立字段时指定字符集
CREATETABLE table_name2 (id int,name char(10) CHARACTER SET utf8 COLLATE utf8_general_ci);
3、查看编码
一、查看 MySQL 数据库服务器和数据库字符集
show variables like'%char%';
二、查看 MySQL 数据库服务器和数据库核对排序方式(校对规则)
SHOWVARIABLES LIKE 'COLLATION';
三、查看当前安装的 MySQL 所支持的字符集。
show charset;
四、查看当前数据库编码:
SHOW CREATE DATABASE db_name;
五、查看表编码:
SHOW CREATE TABLE tbl_name;
六、查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;
4、修改字符集
1.修改数据库的字符集
mysql>usemydb
mysql>ALTERDATABASE mydb CHARACTER SET utf-8(utf8) COLLATE utf8_general_ci
2.修改表的字符集
把表默认的字符集和全部字符列(CHAR,VARCHAR,TEXT)改成新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name[COLLATE ...]
如:ALTER TABLE logtest CONVERT TO CHARACTERSET utf8 COLLATE utf8_general_ci;
只是修改表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name[COLLATE...];
如:ALTER TABLE logtest DEFAULT CHARACTERSET utf8 COLLATE utf8_general_ci;
3.修改字段的字符集:
ALTER TABLE tbl_nameCHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE logtest CHANGE title titleVARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
5、用mysql命令修改编码
setcharacter_set_client=utf8; //客户端字符集
setcharacter_set_connection=utf8; //连接字符集
setcharacter_set_database=utf8; //数据库字符集
setcharacter_set_results=utf8; //结果字符集
setcharacter_set_server=utf8; //服务器字符集
set character_set_system=utf8; //系统字符集
setcollation_connection=utf8; //连接校对
setcollation_database=utf8; //数据库校对
setcollation_server=utf8; //服务器校对
setnames 字符集;同时修改character_set_client/character_set_connection/character_set_results字符集.
6、MySQL中的字符集转换过程
1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2. 进行内部操做前将请求数据从character_set_connection转换为内部操做字符集,其肯定方法以下:
使用每一个数据字段的CHARACTER SET设定值;
若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
若上述值不存在,则使用对应数据库的DEFAULTCHARACTER SET设定值;
若上述值不存在,则使用character_set_server设定值。
3. 将操做结果从内部操做字符集转换为character_set_results。
7、MySQL默认字符集
MySQL对于字符集的指定能够细化到一个数据库,一张表,一列,应该用什么字符集。 可是,传统的程序在建立数据库和数据表时并无使用那么复杂的配置,它们用的是默认的配
置,那么,默认的配置从何而来呢?
(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,能够在配置文件 (my.ini) 中指定一个默认的的字符集,若是没指定,这个值继承自编译时指定的;
(3)启动mysqld 时,能够在命令行参数中指定一个默认的的字符集,若是没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当建立一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;
(5)当选定了一个数据库时,character_set_database被设定为这个数据库默认的字符集;
(6)在这个数据库里建立一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,不然此栏缺省的字符集就是表默认的字符集;
8、其余注意事项
MySQL的字符集支持(Character SetSupport)有字符集(Character set)和排序方式(Collation)两个方面。对于字符集的支持细化到四个层次: 服务器(server),数据库(database)
,数据表(table)和链接(connection)。
my.cnf中的default_character_set设置只影响mysql命令链接服务器时的链接字符集,不会对使用libmysqlclient库的应用程序产生任何做用!
对字段进行的SQL函数操做一般都是之内部操做字符集进行的,不受链接字符集设置的影响。
若是什么地方都不修改,那么全部的数据库的全部表的全部栏位的都用latin1 存储,不过咱们若是安装 MySQL,通常都会选择多语言支持,也就是说,安装程序会自动在配置文件中把default_character_set 设置为 UTF-8,这保证了缺省状况下,全部的数据库的全部表的全部栏位的都用 UTF-8 存储。
若是要批量修改表和字段的字符集可用下面命令生成一个sql文件,而后再执行
SELECT CONCAT('alter table ',table_name,' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')FROM INFORMATION_SCHEMA.tablesWHERETABLE_SCHEMA='database_name' into outfile '/mysql/1.sql';