character_set_database我原先理解为默认数据库的字符集,也就是使用use database切换到的那个数据库的字符集,不管当前数据库的字符集设置为如何,如果我use DB,这个DB的字符集为UTF8,那么当character_set_database设置为latin1,我use到这个数据库,当在当前数据库创建表如果没有指定字符集,那么该表使用character_set_database设定的字符集,但是下面的实验推翻了我的认识
初始
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
mysql> create database mymy;show create database mymy;
Query OK, 1 row affected (0.00 sec)
+———-+—————————————————————–+
| Database | Create Database |
+———-+—————————————————————–+
| mymy | CREATE DATABASE `mymy` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+———-+—————————————————————–+
改变character_set_server为utf8
mysql> set session character_set_server=utf8;show variables like ‘char%’;
Query OK, 0 rows affected (0.00 sec)
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
mysql> drop database mymy;create database mymy;show create database mymy;
Query OK, 0 rows affected (0.01 sec)
Query OK, 1 row affected (0.00 sec)
+———-+—————————————————————+
| Database | Create Database |
+———-+—————————————————————+
| mymy | CREATE DATABASE `mymy` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+———-+—————————————————————+
1 row in set (0.00 sec)
是的character_set_server正如我所想的一样,下面看一下character_set_database
mysql> use mymy;create table tt1(id int(5));show create table tt1;
Database changed
Query OK, 0 rows affected (0.03 sec)
+——-+————————————————————————————–+
| Table | Create Table |
+——-+————————————————————————————–+
| tt1 | CREATE TABLE `tt1` (
`id` int(5) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 | 为什么是utf8 ,我的character_set_database设置可是latin1
+——-+————————————————————————————–+
惊奇的发现character_set_database自动设置为utf8了
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
来创建一个字符集为latin1的数据库
mysql> create database mymy character set latin1;
Query OK, 1 row affected (0.00 sec)
mysql> show create database mymy;
+———-+—————————————————————–+
| Database | Create Database |
+———-+—————————————————————–+
| mymy | CREATE DATABASE `mymy` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+———-+—————————————————————–+
1 row in set (0.00 sec)
mysql> use mymy;show variables like ‘char%’;
Database changed
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
瞧自动设置为latin1了
mysql> create table tt1(id int(5));show create table tt1;
Query OK, 0 rows affected (0.02 sec)
+——-+—————————————————————————————-+
| Table | Create Table |
+——-+—————————————————————————————-+
| tt1 | CREATE TABLE `tt1` (
`id` int(5) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+——-+—————————————————————————————-+
1 row in set (0.00 sec)
当然是latin1啦
在创建一个不是默认数据库的表
mysql> create table test.tt1(id int(5));show create table test.tt1;
Query OK, 0 rows affected (0.04 sec)
+——-+————————————————————————————–+
| Table | Create Table |
+——-+————————————————————————————–+
| tt1 | CREATE TABLE `tt1` (
`id` int(5) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+——-+————————————————————————————–+
测试结果说明character_set_database这个值不是一个定死的值,而是根据use DB,这个DB规定的字符集来切换的,也就是一个动态改变的值,use到的这个数据库的字符集是latin1,它就是latin1,DB的字符集是utf8它就是utf8。
字符集和乱码问题
上周碰到一个奇怪的问题,就是从业务数据库中查询一个字段varchar(100)查到100个汉字,但是我自己建一个测试表却只能对varchar(10)字段插入3个汉字,从数据库的字符集,到表字符集,再到字段的字符集,都检查了一遍,都是utf8格式,后来才查出来是客户端字符集设置问题,character_set_client设置为latin1了,设置为utf8就正常了,
下面整理一下若干字符集参数
character_set_client 客户端的字符集
character_set_connection 连接字符集
character_set_database 默认数据库的字符集 (use database切换默认数据库)
character_set_server 服务器默认的字符集 (当你创建数据库的时候如果没有指定字符集,那么就使用这个值)
character_set_filesystem 在使用LOAD DATA INFILE, SELECT ... INTO OUTFILE , LOAD_FILE()函数的时候会有从character_set_client到character_set_filesystem的切换(默认值为binary,表示不进行任何转换)
如果表和列的字符集合为UTF8,当character_set_client和character_set_connection设置为UTF8时,OK插入中文没问题,查询出现乱码?那么检查
character_set_results是否设置为UFT8,什么还有问题,那么要注意下客户端软件(比如putty)显示字符集的设置.
SET CHARACTER (临时改变character_set_client,character_set_connection值)
set names utf8(临时改变character_set_client,character_set_connection, character_set_results值为utf8)
charset utf8 相当于set names utf8
创建数据库语句
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;
分享到:
相关推荐
设置mysql字符集 mysql 乱码
mysql 字符集 转换
linux修改mysql字符集 linux修改mysql字符集
查看mysql字符集MySQL 乱码的根源是的 MySQL 字符
MYSQL修改字符集默认问题
NULL 博文链接:https://sunjin.iteye.com/blog/517574
mysql数据库,表 ,字段的字符集设置
mysql字符集和校对集
mysql字符集查看以及修改
精通MySQL字符集与校对集,再也不会为乱码而心烦意乱了
关于MySQL字符集查看与修改; MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation)。 MySQL对于字符集的支持细化到四个层次: 服务器(server),数据库(database),...
设定mysql字符集解决终端乱码设定mysql字符集解决终端乱码
Mysql字符集
linux下设置mysql字符集为UTF-8以及mysql重启
MYSQL字符集乱码的解决 在命令行下,以及从网页取出来就不会出现乱码
Linux下修改MySQL字符集 1.查找MySQL的cnf文件的位置 find / -iname '*.cnf' -print /usr/share/mysql/my-innodb-heavy-4G.cnf /usr/share/mysql/my-large.cnf /usr/share/mysql/my-small.cnf /usr/share/mysql/...
解决字符集通讯设置不匹配的方法: (修改默认的character_set_client,character_set_connection,character_set_result)
Mysql字符集设置原理及常见问题解决
mysql数据库互相转换及同步工具-MySQL_MySQL字符集互转
Mysql数据库乱码 问题彻底解决 针对JAVA