MYSQL字符集问题
MySQL的字符集支持(Set)有两个方面:
字符集(set)和排序方法()。
对字符集的支持细化为四个级别:
服务器()、数据库()、数据表(表)和连接()。
1.MySQL默认字符集
MySQL 的字符集规范可以细化为数据库、表和列应使用什么字符集。
然而,传统程序在创建数据库和数据表时不会使用如此复杂的配置。 他们使用默认配置。 那么,默认配置从何而来? (1)编译MySQL时,指定了默认字符集。 该字符集是;
(2)安装MySQL时,可以在配置文件(my.ini)中指定默认字符集。 如果未指定,则该值继承自编译时指定的值;
(3)启动时,可以在命令行参数中指定默认字符集。 如果不指定,则该值继承自配置文件中的配置,并设置为此时的默认字符集;
(4) 创建新数据库时,除非明确指定,否则该数据库的字符集设置为;
(5)选择数据库时,将se设置为数据库的默认字符集;
(6)在本数据库中创建表时,将表的默认字符集设置为se,即本数据库的默认字符集;
(7) 在设置表中的列时,除非明确指定,否则该列的默认字符集为表的默认字符集;
简单总结一下,如果不做任何修改,那么将使用所有数据库中所有表中的所有字段。
存储,但是如果我们安装MySQL,通常会选择多语言支持,也就是说安装程序会自动添加
t设置为UTF-8,保证默认情况下所有数据库中所有表的所有字段都以UTF-8存储。
2、查看默认字符集(默认情况下mysql的字符集是()
通常,可以使用以下两个命令来查看系统的字符集和排序设置:
mysql> 显示类似“%”;
+--------------------------------------+---------------------- ----- ----------+
| | 价值|
+--------------------------------------+---------------------- ----- ----------+
| | |
|化| |
| 搜索 | |
| 干| |
| s | |
| | |
| | UTF8 |
| | D:"mysql-5.0.37"分享"" |
+--------------------------------------+---------------------- ----- ----------+
mysql> 显示类似“%”;
+------------------------+-----------------+
| | 价值|
+------------------------+-----------------+
| | |
| | |
| | |
+------------------------+-----------------+
3.修改默认字符集
(1)最简单的修改方法是修改mysql的my.ini文件中的字符集键值。
如--set=utf8
=utf8
修改完后,重启mysql服务,mysql
使用 mysql> SHOW LIKE '%'; 查看发现数据库编码已改为utf8
+--------------------------------------+---------------------- ----- ----------+
| | 价值|
+--------------------------------------+---------------------- ----- ----------+
| | UTF8 |
|化| UTF8 |
| 搜索 | UTF8 |
| 干| |
| s | UTF8 |
| | UTF8 |
| | UTF8 |
| | D:"mysql-5.0.37"分享"" |
+--------------------------------------+---------------------- ----- ----------+
(2)还有一种修改字符集的方法,就是使用mysql命令
mysql > SET = utf8;
MySQL涉及的几种字符集
-set-/--set:服务器字符集,默认使用。
-set-:数据库字符集。
-set-table:数据库表字符集。
优先级依次增加。 因此,一般情况下,只需要设置-set-即可,创建数据库和表时不需要指定字符集。 这样就统一使用-set-字符集了。
-set-:客户端字符集。 客户端默认字符集。 当客户端向服务器发送请求时,该请求将使用此字符集进行编码。
-set-:结果字符集。 当服务器向客户端返回结果或信息时,结果会使用此字符集进行编码。
在客户端,如果未定义-set-,则使用-set-字符集作为默认字符集。 所以只需设置-set-。
要处理中文,可以将-set-和-set-都设置为,如果要同时处理多种语言,则设置为UTF8。
关于MySQL中文的问题
解决乱码的方法是在执行SQL语句之前将MySQL的以下三个系统参数设置为与服务器字符集-set-相同的字符集。
:客户端的字符集。
s:结果字符集。
化:连接字符集。
通过向 MySQL 发送语句来设置这三个系统参数:set names
关于GBK、UTF8
UTF-8:-8bit,允许BOM,但通常不包含BOM。 它是一种用于解决国际字符的多字节编码。 英文使用8位(即1个字节),中文使用24位(即3个字节)。 UTF-8 包含世界上所有国家/地区使用的字符。 它是国际编码,通用性很强。 UTF-8编码的文本可以在支持UTF8字符集的各个国家的浏览器上显示。 例如,如果是UTF8编码,外国人的英文IE上也可以显示中文,而且不需要下载IE的中文语言支持包。
GBK是在国家标准的基础上扩展后兼容的标准。 GBK的文本编码是用双字节表示的,即中文和英文字符都用双字节表示。 为了区分汉字,最高位设置为1。GBK包含了所有汉字,是国家编码。 它的通用性不如UTF8,但UTF8比GBD占用的数据库更大。
GBK等与UTF8必须进行编码才能相互转换:
GBK、----UTF8
UTF8---GBK,
对于网站或论坛,如果英文字符较多,建议使用UTF-8以节省空间。 不过现在很多论坛插件一般只支持GBK。
是 GBK 的子集,GBK 是
GBK是一个大字符集,包括中文、日文和韩文字符
如果是推荐GBK的中文网站,有时还是会出现一些问题。
为了避免出现乱码,应该使用UTF-8。 以后支持国际化也会非常方便。
UTF-8可以看作是一个大的字符集,包含了大部分文本的编码。
使用UTF-8的好处之一是其他地区(如香港、台湾)的用户无需安装简体中文支持就可以正常查看您的文本而不会出现乱码。
这是简体中文的代码
gbk支持简体中文和繁体中文
big5 支持繁体中文
utf-8支持几乎所有字符
首先分析乱码的情况
1、写入数据库时,写入为乱码
2、查询结果返回乱码
出现乱码到底是怎么回事?
我们先在mysql命令行输入
显示如“%char%”;
检查mysql字符集设置:
mysql> 显示类似“%char%”;
+--------------------------------------+---------------------- ----- ------------------+
| | 价值|
+--------------------------------------+---------------------- ----- ------------------+
| | 国语 |
|化| 国语 |
| 搜索 | 国语 |
| 干| |
| s | 国语 |
| | 国语 |
| | UTF8 |
| | /usr/local/mysql/share/mysql//|
+--------------------------------------+---------------------- ----- ------------------+
在查询结果中可以看到客户端、数据库连接、数据库、文件系统以及mysql数据库系统中的查询。
结果、服务器和系统的字符集设置
这里,文件系统字符集是固定的。 系统和服务器的字符集是安装时确定的,与乱码问题无关。
乱码问题与客户端的字符集设置、数据库连接、数据库、查询结果等有关。
*注:客户端是指访问mysql数据库的方式,通过命令行访问。 命令行窗口是客户端。
通过JDBC等连接访问,程序是客户端
当我们将中文数据写入mysql时,需要在客户端进行编码转换、数据库连接、写入数据库。
改变
执行查询时,分别对返回结果、数据库连接、客户端进行编码转换。
现在我们应该清楚,乱码发生在数据库、客户端、查询结果、数据库连接中的一个或多个。
链接
接下来我们就来解决这个问题
登录数据库时,我们使用mysql ----set= set -u root -p 进行连接。 这时我们
然后使用show like '%char%'; 命令检查字符集设置。 可以找到客户端、数据库连接、
查询结果的字符集已设置为登录时选择的字符集。
如果您已经登录,则可以使用设置名称字符集; 命令来达到上述效果,相当于下面的命令:
集=字符集
设置 = 字符集
设置 s = 字符集
如果上述命令无效,还可以使用最简单、最彻底的方法:
一,
1.停止MySQL服务
2.在MySQL安装目录中找到my.ini。 如果没有,请将 my-.ini 复制到 my.ini 中。
3.打开my.ini后,在[]和[]下都添加--set=utf8,保存并关闭
4.启动MySQL服务
要彻底解决编码问题,必须使用
| | 国语 |
|化| 国语 |
| 搜索 | 国语 |
| s | 国语 |
| | 国语 |
| | UTF8
这些代码是一致且统一的。
如果您通过 JDBC 连接数据库,则可以这样编写 URL:
URL=jdbc:mysql://:3306/abs?=true&=字符集
JSP页面等终端也必须设置相应的字符集。
数据库的字符集可以通过修改mysql的启动配置指定字符集来修改,也可以当时添加
set set 强制设置字符集
通过这样的设置,整个数据写入和读取过程中字符集是统一的,不会出现乱码。
为什么在不设置的情况下直接从命令行写中文不会出现乱码?
可以清楚的是,从命令行来看,客户端的字符集设置、数据库连接、查询结果都没有改变。
输入的中文经过一系列转码后又转换回原来的字符集。 我们看到的肯定不是乱码。
但这并不意味着汉字在数据库中就被正确地存储为汉字。
比如现在有一个utf8编码的数据库,客户端连接使用GBK编码,并且使用默认的
-1(即mysql中),我们在客户端发送字符串“”,客户端
一串GBK格式的二进制码会被发送到该层,该层会将该段转换为-1格式。
二进制代码发送到数据库,数据库以utf8格式存储此代码。 我们将此字段格式化为utf8
读取格式的时候肯定会出现乱码。 也就是说,中文数据写入数据库时是以乱码的形式存储的。
在同一个客户端上执行查询操作时,执行了一组与写入时相反的操作。 错误的 utf8 格式二进制
编码转换为正确的GBK编码并正确显示。