及编码,后者是对前者进行比较 *** 作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级
别指定。
对于使用者来说,一般推荐使用utf8编码来存储数据。而要解决乱码问题,不单单是MySQL数据的存储问题,还
和用户的程序文件的编码方式、用户程序和MySQL数据库的连接方式都有关系。
首先,MySQL有默认的字符集,这个是安装的时候确定的,在编译MySQL的时候可以通过DEFAULT_CHARSET=
utf8和DEFAULT_COLLATION=utf8_general_ci这两个参数(MySQL55版本,51版本用--with-charset=
utf8 --with-collation=utf8_general_ci)来指定默认的字符集为utf8,这也是最一劳永逸的办法,这样指定后,
客户端连接到数据库的编码方式也默认是utf8了,应用程序不需要任何处理。
但是遗憾的是,很多人编译安装MySQL的时候没有指定这两个参数,大多数人更是通过二进制程序的方式安装,那
么这时候MySQL的默认字符集是latin1。而这时候我们仍然可以指定MySQL的默认字符集,通过mycnf文件增加
两个参数:
1在[mysqld]下添加
default-character-set=utf8(mysql 55 版本添加character-set-server=utf8)
2在[client]下添加
default-character-set=utf8
这样我们建数据库建表的时候就不用特别指定utf8的字符集了。配置文件里的这种写法解决了数据存储和比较的问题
,但是对客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说总的set
names命令。事实上,set names utf8命令对应的是服务器端以下几个命令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = xutf8;
但这三个参数是不能写在配置文件mycnf里的。只能通过set命令来动态修改。我们需要的是在配置文件里写好一劳
永逸的办法。那么这时候,是否有在服务端解决问题的办法呢,可行的思路是在init_connect里设置。这个命令在每
个普通用户连接上来的时候都会触发执行,可以在[mysqld]部分增加以下一行设置连接字符集:
在[mysqld]下添加:
init_connect = 'SET NAMES utf8'
总结:
1、首选在编译安装MySQL的时候指定两个参数使用utf8编码。
2、次选在配置文件mycnf或myini设定两个参数,同时设置init_connect参数。
3、第三在配置文件mycnf或myini设定两个参数,同时客户端的连接指定set names命令。
4、在配置文件mycnf里的client和server处加入default-character-set参数方便管理。
复制代码
1 -------客户端----
2 [client]
3 no-beep
4
5 # pipe
6 # socket=mysql
7 port=3306
8
9 [mysql]
10
11 default-character-set=gb2312
12
13 -----服务器----
14
15 # The default character set that will be used when a new schema or table is
16 # created and no character set is defined
17 character-set-server=gb2312
复制代码
1,service mysqld stop,停用mysql。
2cp /etc/mycnf /etc/mycnfbak,修改前做备份,这是个好习惯。
修改mycnf或myini(只有修改配置文件,并重启服务器,才能永久生效)
vi /etc/mycnf
在[client]下添加,client为控制客户端的,没试过,没有的可以不需要加。
default-character-set=utf8
在[mysqld]下添加,mysqld为控制服务器端的,改过了,OK。
default-character-set=utf8
3service mysqld restart,重启。
4show variables like '%char%';查看。
以下为网络转载,比较全。
//////////////////////////////////////////
查看mysql字符集MySQL 乱码的根源是的 MySQL 字符
ubuntu 1004 mySql 启动,停止,重启
启动:sudo /etc/initd/mysql start
停止:sudo /etc/initd/mysql stop
重启:sudo /etc/initd/mysql restart
注意:从windows下拷贝过来的文件在linux下不能直接加入数据库,因为字符集不一样,这样打开即使显示是中文也不能在数据库中显示,要把文件拷贝进linux的另一个文件中转换字符才可以。
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令。包括查看 MySQL 数据库服务器字符集、查看 MySQL 数据库字符集,以及数据表和字段的字符集、当前安装的 MySQL 所支持的字符集等。
一、查看 MySQL 数据库服务器和数据库字符集。
mysql> show variables like '%char%';
二、查看 MySQL 数据表(table) 的字符集。
mysql> show table status from sqlstudy_db like '%countries%';
三、查看 MySQL 数据列(column)的字符集。
mysql> show full columns from countries;
四、查看当前安装的 MySQL 所支持的字符集。
mysql> show charset;
mysql> show char set;
以上查看 MySQL 字符集命令,适用于 Windows & Linux。
1查找MySQL的cnf文件的位置
find / -iname 'cnf' -print
/usr/share/mysql/my-innodb-heavy-4Gcnf
/usr/share/mysql/my-largecnf
/usr/share/mysql/my-smallcnf
/usr/share/mysql/my-mediumcnf
/usr/share/mysql/my-hugecnf
/usr/share/texmf/web2c/texmfcnf
/usr/share/texmf/web2c/mktexcnf
/usr/share/texmf/web2c/fmtutilcnf
/usr/share/texmf/tex/xmltex/xmltexfmtutilcnf
/usr/share/texmf/tex/jadetex/jadefmtutilcnf
/usr/share/doc/MySQL-server-community-5122/my-innodb-heavy-4Gcnf
/usr/share/doc/MySQL-server-community-5122/my-largecnf
/usr/share/doc/MySQL-server-community-5122/my-smallcnf
/usr/share/doc/MySQL-server-community-5122/my-mediumcnf
/usr/share/doc/MySQL-server-community-5122/my-hugecnf
2 拷贝 smallcnf、my-mediumcnf、my-hugecnf、my-innodb-heavy-4Gcnf其中的一个到/etc下,命名为mycnf
cp /usr/share/mysql/my-mediumcnf /etc/mycnf
3 修改mycnf 或myini(56版本)
vi /etc/mycnf
在[client]下添加
default-character-set=utf8
在[mysqld]下添加
default-character-set=utf8
4重新启动MySQL
[root@bogon ~]# /etc/rcd/initd/mysql restart
Shutting down MySQL [ 确定 ]
Starting MySQL [ 确定 ]
[root@bogon ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor Commands end with ; or \g
Your MySQL connection id is 1
Server version: 5122-rc-community-log MySQL Community Edition (GPL)
Type 'help;' or '\h' for help Type '\c' to clear the buffer
其他的一些设置方法:
通过配置文件修改:
修改/var/lib/mysql/mydb/dbopt
default-character-set=latin1
default-collation=latin1_swedish_ci
为
default-character-set=utf8
default-collation=utf8_general_ci
重起MySQL:
[root@bogon ~]# /etc/rcd/initd/mysql restart查看数据库的字符集
show variables like 'character\_set\_%';
输出:
+--------------------------+--------+
| 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 |
+--------------------------+--------+
mysql创建数据库一般使用的字符集为UTF-8,但具体的要根据实际情况进行选择。
工具:mysql56,Navicat Premium
步骤:
1、打开Navicat Premium,双击左侧服务器的树形结构,连接到服务器,这里以localhost为例。
2、在localhost处点右键,选择“新建数据库”。
3、d出窗口中,填写新建的数据库名字,这里填写的是“badkano”,然后选择字符集,下拉列表,选择UTF-8,排序规则可不填,然后点“确定”按钮。
4、由图可见,badkano数据库创建成功。
需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为:>show variables like 'character%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8;MySQL字符集设置
• 系统变量:
– character_set_server:默认的内部 *** 作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集
– 还有以collation_开头的同上面对应的变量,用来描述字符序。
• 用introducer指定文本字符串的字符集:
– 格式为:[_charset] ’string’ [COLLATE collation]
– 例如:
SELECT _latin1 ’string’;
SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;
– 由introducer修饰的文本字符串在请求过程中不经过多余的转码,直接转换为内部字符集处理。
MySQL中的字符集转换过程
1 MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2 进行内部 *** 作前将请求数据从character_set_connection转换为内部 *** 作字符集,其确定方法如下:
- 使用每个数据字段的CHARACTER SET设定值;
- 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
- 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
- 若上述值不存在,则使用character_set_server设定值。
1、查看数据库编码格式
mysql> show variables like 'character_set_database'2、查看数据表的编码格式
mysql> show create table <表名>;3、创建数据库时指定数据库的字符集
mysql>create database <数据库名> character set utf8;4、创建数据表时指定数据表的编码格式
create table tb_books (name varchar(45) not null,
price double not null,
bookCount int not null,
author varchar(45) not null ) default charset = utf8;
5、修改数据库的编码格式
mysql>alter database <数据库名> character set utf8;6、修改数据表格编码格式
mysql>alter table <表名> character set utf8;7、修改字段编码格式
mysql>alter table <表名> change <字段名> <字段名> <类型> character set utf8;mysql>alter table user change username username varchar(20) character set utf8 not null;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)