MySQL乱码处理及字符集相关介绍_MySQL
bitsCN.com
- 问题引入:
我们经常会遇到一些向MySQL数据库中插入中文,但是select出来的时候,却发现是乱码的情况。如我们向表a出入这样一段记录:i
insert into a values('你好helloworld你好','helloworld');
可能当你访问它的时候,会发现他的结果变成如下图所示:
那怎么样才能解决这种问题呢?通过下文对MySQL中字符集的一些操作,你将会得到答案!
-
查看库、表字符集命令:
要解决字符集的问题,首先要知道现在的系统、数据库、表、客户端等使用什么样的字符集,以及系统支持什么字符集等,下面介绍一些获取相关信息的语句:
1.查看数据库支持的所有字符集
show character set;或者show char set;
2.查看当前状态,里面当然包括字符集的设置:
status或者/s
其中Db characterset对应的是数据库目录下的db.opt文件内容:
3.查看系统字符集设置,包括所有的字符集设置:
show variables like '%char%';
得出如何所示结果:
其中的含义如下:
关于connection相关的字符集的官方文档:
- What character set is the statement in when it leaves the client?
The server takes the character_set_client system variable to be the character set in which statements are sent by the client.
- What character set should the server translate a statement to after receiving it?
For this, the server uses the character_set_connection and collation_connection system variables. It converts statements sent by the client from character_set_client to character_set_connection (except for string literals that have an introducer such as _latin1 or _utf8). collation_connection is important for comparisons of literal strings. For comparisons of strings with column values, collation_connection does not matter because columns have their own collation, which has a higher collation precedence.
The character_set_results system variable indicates the character set in which the server returns query results to the client. This includes result data such as column values, and result metadata such as column names and error messages.
- What character set should the server translate to before shipping result sets or error messages back to the client?
从上文中可以看出character_set_connection、character_set_client、character_set_results三个字符集什么时候用到。从实际上可以看到,当客户端连接服务器的时候,它会将自己想要的字符集名称发给mysql服务器,然后服务器就会使用这个字符集去设置character_set_connection、character_set_client、character_set_results这三个值。如cmd是用gbk,而mysql workbench是用utf8.
CMD:
MySql WorkBench:
4.查看数据表中字符集设置:
show full columns from tablename;
show create table tablename/G;
5.查看数据库编码:
show create database dbname;
- 创建时指定字符集:
知道了怎么查找字符集的相关信息之后,我们就要懂得怎么在创建指定对象的时候,为该对象匹配相应的字符集。
1.服务器级:
在安装MySQL时可以设置服务器的默认编码格式,也可对my.ini做修改,修改[mysqld]里面的character_set_server=utf8,则可设置character_set_server的值。
2.数据库级:
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8;
注意,如果不指定默认的字符集,则系统会根据character_set_database的值进行设置,如:
3.表级:
CREATE TABLE `db_name`.`tb_name` (id VARCHAR(20) NOT NULL,name VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
从下图可看出,定义表的默认字符集为utf8,即使character_set_database为gbk,但是表的列都未utf8
但要注意,如果没有定义表的默认字符集,则他会按照character_set_database的值来设置,如图所示:
4.列级:
CREATE TABLE `db_name`.`tb_name` ( id varchar(20) NOT NULL, name varchar(20) CHARACTER SET utf8 );
从下图可以看到,整个表的默认字符集为gbk,所以没有指定字符集的列都用默认的字符集,而指定了字符集的列name,则使用指定的字符集utf8。
- 修改字符集命令
如果已经是创建好的对象,那又应该如何处理呢。我们就应该对指定对象就行修改字符集的操作。
1.修改character_set_connection、character_set_client、character_set_results三值:
对于某一个连接来说,可以使用:
SET NAMES 'charset_name' [COLLATE 'collation_name']
命令
SET NAMES 'charset_name' [COLLATE 'collation_name']
相当于
SET character_set_client = charset_name; SET character_set_results = charset_name; SET character_set_connection = charset_name;
另外、还可以修改配置文件,对[mysql]下增加default-character-set=utf8,配置成你想要的字符集。(个人尝试在my.ini里面配置过,没有成效,不知道是不是被使用的客户端想要的字符集给覆盖掉了呢?)
2.修改character_set_database字段:
ALTER DATABASE db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collation_name]
3.修改character_set_server字段:
最简单的方法是直接改my.ini配置文件里面[mysqld]的字段,增加character-set-server=gbk,然后重启mysqld,则可改为你想要的字符集。
4.修改表的字符集:
ALTER TABLE tbl_name [[DEFAULT] CHARACTER SET charset_name] [COLLATE collation_name]
5.修改列的字符集:
col_name {CHAR | VARCHAR | TEXT} (col_length) [CHARACTER SET charset_name] [COLLATE collation_name]
例如:
ALTER TABLE t1 MODIFY col1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci;
- 参考资料:
MySQL的Character Set Support: http://dev.mysql.com/doc/refman/5.6/en/charset.html
mysql常用查看库,表字符集命令: http://bjlfp.blog.163.com/blog/static/773684612012298455765/
MySQL 插入数据时,中文乱码问题的解决: http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html
bitsCN.com

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Go语言是一种高效、简洁且易于学习的编程语言,因其在并发编程和网络编程方面的优势而备受开发者青睐。在实际开发中,数据库操作是不可或缺的一部分,本文将介绍如何使用Go语言实现数据库的增删改查操作。在Go语言中,我们通常使用第三方库来操作数据库,比如常用的sql包、gorm等。这里以sql包为例介绍如何实现数据库的增删改查操作。假设我们使用的是MySQL数据库。

解决PHP写入txt文件中文乱码的技巧随着互联网的迅猛发展,PHP作为一种广泛应用的编程语言,被越来越多的开发者所使用。在PHP开发中,经常需要对文本文件进行读写操作,其中包括写入中文内容的txt文件。然而,由于编码格式的问题,有时候会导致写入的中文出现乱码。本文将介绍一些解决PHP写入txt文件中文乱码的技巧,并提供具体的代码示例。问题分析在PHP中,文本

Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

HTML无法直接读取数据库,但可以通过JavaScript和AJAX实现。其步骤包括建立数据库连接、发送查询、处理响应和更新页面。本文提供了利用JavaScript、AJAX和PHP来从MySQL数据库读取数据的实战示例,展示了如何在HTML页面中动态显示查询结果。该示例使用XMLHttpRequest建立数据库连接,发送查询并处理响应,从而将数据填充到页面元素中,实现了HTML读取数据库的功能。

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在PHP编程中,处理字符串时经常会遇到空格的问题,这其中包括中文空格。在实际开发中,我们常常会使用trim函数来去除字符串两端的空格,但是对于中文空格的处理相对复杂一些。本文将介绍如何利用PHP中的trim函数来处理中文空格,并提供具体的代码示例。首先,让我们了解一下中文空格的种类。在中文中,空格不仅包括常见的英文空格(space),还存在其他一些特殊的空格
