安装mysql之后,如果存储中文,再读出的时候就会出现乱码问题。现在的字符集有几百种之多,都是一些公司或者组织定义的。我们应该使用能够容纳世界全部语言全部字符的字符集,这样就不会再出现乱码问题。这就是现在通用的UTF-8。要理解编码就应该区分字符集和编码格式是说的同一问题的两个方面。
导致mysql中文乱码的原因是存储和读取时采用的是不同的字符集。
推荐在建库之前修改编码格式:
一、进入mysql(mysql -uroot -p),查看当前数据库字符集(status;)
二、#vim /etc/mysql/my.cnf
三、
[client]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
四、重启mysql(/etc/init.d/mysql stop /etc/init.d/mysql start)
上面是建库之前的操作,如果是数据库正在使用,然后发现编码格式不对应该怎么办呢?
一、导出表结构:mysqldump -uroot -p --default-character-set=gbk -d databasesname > createtable.sql
二、手工修改createtable.sql中的表结构定义的字符集为新的字符集。
三、确保记录不再更新,导出所有记录。
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename>data.sql
--quick:转存大表时使用,一次次检索表中的行,而不是一次检索所有行,输出时存储在缓存。
--no-create-info:不导出建表语句。
--extended-insert:使用包含几个VALUES列表的多行INSERT语法。
--default-character-set=latin1:按照原有字符集导出,这样在导出文件中所有中文都是可见的。
四、打开data.sql,将SET NAMES latin1改为SET NAMES gbk
五、使用新的字符集创建新的数据库。
create database databasename defaule charset gbk;
六、创建表,执行createtable.sql
mysql -uroot -p databasename < createtable.sql
七、导入数据
mysql -uroot -p databasename < data.sql
下面是我国自定义的一些编码标准:
1)GB2312-80:1980年发布,双字节编码字符集。
2)GB13000:1993年发布,使用很少,只是一个形式上的标准。
3)GBK:1995年发布,因为得到了windows 95的支持大行其道。
4)GB18030:2000年发布,没怎么听过。
下面是常用字符集的比较:
1)ASCII,定长,单字节7位编码,最早的奠基性编码。
2)GBK,定长,双字节编码,自持广泛。
3)UTF-8,不定长,1-4字节编码,互联网和UNIX广泛支持的Unicode字符集。
4)UTF-16,不定长,Java等内部使用的字符集。
字符集如何选择呢:
1)在多国使用,国际化的范儿,使用Unicode,也就是UTF-8。
2)如果数据库中已有数据的导入,就要考虑数据库字符集对已有数据的兼容性。
3)数据库只支持中文,数据量很大,性能要求高,可以使用双字节编码的GBK,因为相比于UTF-8的3字节,空间占用更少。
4)如果数据库要做大量的字符运算,如比较排序等,定长的比不定长的更快。
5)客户端普遍采用的字符集格式。
mysql支持多种字符集,在同一台服务器,同一个数据库,甚至同一个表的不同字段都可以制定不同的字符集。
可以只用命令show character set; 插卡看支持的字符集。相对字符集还有校对规则的问题,可以查阅相关资料。
mysql字符集的设置:
有四个级别:服务器级,数据库级,表级和字段级。
1)数据库字符集的设置:在my.cnf(windows为my.ini)中设置:[mysqld]character-set-server=utf-8 在启动选项中设置:mysqld --character-set-server=utf-8 也可以在编译时制定。
2)数据库字符集和校对规则,可在创建数据库时制定,也可在创建之后通过alter database命令修改。
3)标的设置同上,要显示表的字符集和设置规则可以通过show create table命令查看。
为您推荐
常见的10个问题#产品开发中常见的10个问题思维导图需求相关#1. 需求不明确#在日常工作中,需求来源于用户、老板、客户、竞品分析、业务部门、产品经理等,这些人或部门会提出需求,因为他们不是产品经理,提出的需求..
最近数据库升级为mysql8.0,在使用过程中发现一些问题,首先mysql8.0有很多新特性,对服务器配置要求较高,所有就考虑把数据库版本切换到MySQL5.6,经过多出测试处理发现在8.0数据库打包的数据导入到5.6总是报错,或..
因为之前一直再查找一些比较好的数据库规范,以方便在开发时连接 MySQL 进行查询/建表的时候,能根据规范来执行,达到提高 查询速度 / 执行 SQL 的性能 和提升 MySQL 的整体性能, 这里主要是存放一些比较好的一些数..
之前,笔者有分享过说我最喜欢的增长是可复制可持续的增长,它一般都会有三个关键过程:首先是小范围测试,低成本试错,也就是最小可行性验证,让ROI最大化。然后是把测试的最优结果整理为可执行的标准化化流程。前..
4|0表分区MySQL 在 5.1 版引入的分区是一种简单的水平拆分,用户需要在建表的时候加上分区参数,对应用是透明的无需修改代码。对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实..
技术学习要兼顾深度和广度夯实技术基础这么多年来,我面试了很多人。我越发感到「技术基础」非常重要。很多技术的本质是一样的。技术基础足够好的话,学东西可以非常快。往下到操作系统层面,甚至计算机硬件层面,你..
一、Mysql分表的原因1、当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会停在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。2、mysql中有一种机制是表锁定..
一, 创建用户: 命令:CREATE USER'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, ..
1.单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度。一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时..
以下介绍字符串常见的几个方法。介绍String类在 Java 中,String类是一个代表字符串的类,具有以下特性:不可变性:String对象一旦被创建就是不可变的,即它们的值在创建后不能被更改。任何对String对象的修改操作实..
通过 HttpClient 的 ContentLength 很多时候都可以拿到下载的内容的长度,通过 ReadAsync 可以返回当前读到的长度,将读取到的长度加起来就是已经下载的长度看起来很简单,于是直接给代码private static async Task ..
语句一:select * from users order by rand() LIMIT 1MYSQL手册里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低,效率不行,切..
在 JavaScript 中,有多种方法可以用来连接数组,以下是常见的几种:1. concat() 方法用于连接两个或多个数组,返回一个新的数组,不修改原数组。const arr1 = [1, 2, 3];const arr2 = [4, 5, 6];const result = arr..
在使用 Entity Framework (EF) SQLite 时可能遇到的一些问题,下面是一些常见的问题和对应的解决方案。1. 无法找到适配器或数据库提供程序运行 EF 时提示类似以下错误:No database provider has been configured fo..
FreeSql 是一个功能强大的 .NET 开源 ORM(对象关系映射)工具,支持多种数据库类型并提供丰富的功能特性。以下是使用 FreeSql 过程中常见的问题及其解决方法:1. 数据库连接问题问题描述:无法连接数据库,报错提示..
js数组方法可分为三类:修改、访问、迭代。修改:改变原有数组访问:不改变原有数组,从原有数组中获取数据迭代:对数组的每一项进行处理,返回数据本文主要介绍数组的修改篇一、增加1、push()含义:在数组末尾添加..
SourceTree下载提取码: ni9m 需翻墙或者破解注册当前只有Win的版本,Mac自行百度很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作。然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者..
在 SQL Server 中使用 UUID(全称:Universally Unique Identifier) 作为主键确实可能带来一些性能问题,特别是在大型数据库和高写入负载的场景下。以下是一些关键的性能挑战及其原因:1. 无序插入导致索引碎片化UU..
在 .NET 开发中,常见的报错通常涉及代码编写、配置和运行时环境。以下是一些常见的报错类型及其解决建议:1. NullReferenceException原因:尝试访问空对象的成员。解决:在访问对象之前检查是否为 null,可以使用 C..
gitignore文件可以用来忽略某些不需要放在git里的文件,但是经常我们在gitignore里写了忽略语句,但是不生效原因1. 语法错误,解决方案:再次检查语法是否写的正确, 部分语法参照下面空格不匹配任意文件,可作为分隔符,..