更换mysql_安利给你,关于MySQL字符集乱码与解决方案

推荐阅读:

闭关修炼21天,“啃完”283页pdf,我终于4面拿下字节跳动offer

肺炎在家“闭关”,阿里竟发来视频面试,4面顺利拿下offer

48930103350792be0e6d4830188305e1.png

字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库,都存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,我们推荐在应用开始阶段,就按照需求正确的选择合适的字符集,避免后期不必要的调整。

实战

1、安装MySQL数据库

2、乱码演示

mysql> show variables like 'character_set%';+--------------------------+----------------------------------+| Variable_name            | Value                            |+--------------------------+----------------------------------+| character_set_client     | utf8                             || character_set_connection | utf8                             || character_set_database   | utf8                             || character_set_filesystem | binary                           || character_set_results    | utf8                             || character_set_server     | utf8                             || character_set_system     | utf8                             || character_sets_dir       | /usr/local/mysql/share/charsets/ |+--------------------------+----------------------------------+8 rows in set (0.00 sec) mysql> insert into test.table10 values (1,'云中鹤');Query OK, 1 row affected (0.00 sec) mysql> select * from test.table10;+------+-----------+| id   | names     |+------+-----------+|    1 | 云中鹤    |+------+-----------+1 row in set (0.00 sec) mysql> set names latin1;Query OK, 0 rows affected (0.00 sec) mysql> select * from test.table10;+------+-------+| id   | names |+------+-------+|    1 | ???   |+------+-------+1 row in set (0.00 sec) mysql> show variables like 'character_set%';+--------------------------+----------------------------------+| 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/local/mysql/share/charsets/ |+--------------------------+----------------------------------+8 rows in set (0.00 sec)

乱码解决办法

从上面可以看出,set names latin1;改变了三个参数.. 只要做到客户端,MySQL character-set-client,table charset三个字符集完全一致就可以保证一定不会有乱码出现。

方式:

​ 1、在mysql命令行模式下执行set names xxx;

       mysql> set names utf8;       Query OK, 0 rows affected (0.01 sec)

​ 2、登录mysql的时候指定默认字符集

       [root@node1 ~]# mysql -S /tmp/mysql.sock4 --defaults-character-set=utf8  #-S 指定多实例mysql的套接字文件,       使用--defaults-character-set 指定默认字符集。

​ 3、 修改/etc/sysconfig/i18n 文件,在my.cnf不指定默认字符集的情况下。

       vim /etc/sysconfig/i18n       LANG='zh_CN.UTF-8'   #如果my.cnf不指定,默认使用系统字符集

​ 4、 修改my.cnf 文件,下面两个字段在任意一个字段都是可以的。

       [client]       default-character-set=latin1
       [mysql]       default-character-set=latin1

​ 前两种1,2是临时解决方案,后面两种3,4是永久有效的方案

查看字符集

1、查看系统当前字符集设置,修改之后登陆mysql执行。show variables lile 'character_set%';

mysql> show variables like 'character_set%';#我修改的为utf8,所以客户端的三个参数都是utf8.你可以自行设置字符集。+--------------------------+----------------------------------+| Variable_name            | Value                            |+--------------------------+----------------------------------+| character_set_client     | utf8                             || character_set_connection | utf8                             || character_set_database   | utf8                             || character_set_filesystem | binary                           || character_set_results    | utf8                             || character_set_server     | utf8                             || character_set_system     | utf8                             || character_sets_dir       | /usr/local/mysql/share/charsets/ |

2、mysql常用字符集。执行命令show character set; 查看系统支持字符集。

mysql> show character set;+----------+-----------------------------+---------------------+--------+| Charset  | Description                 | Default collation   | Maxlen |+----------+-----------------------------+---------------------+--------+| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 || dec8     | DEC West European           | dec8_swedish_ci     |      1 || cp850    | DOS West European           | cp850_general_ci    |      1 || hp8      | HP West European            | hp8_english_ci      |      1 || koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 || latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |   #常用| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 || swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 || ascii    | US ASCII                    | ascii_general_ci    |      1 || ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 || sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 || hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 || tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 || euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 || koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 || gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 || greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 || cp1250   | Windows Central European    | cp1250_general_ci   |      1 || gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 | #常用| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 || armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 || utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |#常用| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 || cp866    | DOS Russian                 | cp866_general_ci    |      1 || keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 || macce    | Mac Central European        | macce_general_ci    |      1 || macroman | Mac West European           | macroman_general_ci |      1 || cp852    | DOS Central European        | cp852_general_ci    |      1 || latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 || utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 | #常用| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 || utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 || cp1256   | Windows Arabic              | cp1256_general_ci   |      1 || cp1257   | Windows Baltic              | cp1257_general_ci   |      1 || utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 || binary   | Binary pseudo charset       | binary              |      1 || geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 || cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 || eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |+----------+-----------------------------+---------------------+--------+39 rows in set (0.00 sec)

字符集选择

​ 1、如果处理各种各样的文字,发布到不同语言国家地区,选择Unicode。,对mysql对号utf-8。

​ 2、只需中文,数据量很大,性能要求也高,选择gbk.。

​ 3、处理移动物联网业务,选utf8mb4

​ 建议在能够完全满足应用的前提下,尽量使用小的字符集。因为更小的字符集意味着能够节省空间、减少网络传输字节数,同时由于存储空间的较小间接的提高了系统的性能。

服务器字符集设置

[mysqld]...character-set-server=utf8   #添加这条语句,可设置服务器端字符集。

mysql服务端重新启动后,这两个参数会改变为设定值。

| character_set_server     | utf8    | character_set_database   | utf8

切换字符集

  1. 将一种编码的数据库转换为另一种编码的数据。
alter database dbname character set xxx; #只能对以后的数据有效,对之前的数据无效。基本不使用
  1. 常用转换数据库字符集方案
mysqldump -S /tmp/mysql.sock4 --default-character-set=utf8 -d test > /data/test-`date +%F`.sql #1、导出表结构而不导出数据vim /data/test-`date +%F`.sqlDROP TABLE IF EXISTS `table10`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `table10` (  `id` int(11) DEFAULT NULL,  `names` char(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;  #2、这里的CHARSET改为你想要修改的字符集mysqldump -S /tmp/mysql.sock4 --extended-insert --no-create-info test > /data/test-data-`date +%F`.sql  #3、导出数据内容vim /data/test-data-`date +%F`.sqlLOCK TABLES `table10` WRITE;set names utf8;  #4、这一行是多加的,自己指定想要转换的字符集INSERT INTO `table10` VALUES (1,'云中鹤');UNLOCK TABLES;mysql> create database if not exists test;  #5、创建数据库,存储转换后的数据Query OK, 1 row affected, 0 warning (0.00 sec)mysql -S /tmp/mysql.sock4 test < /data/test-`date +%F`.sql  #6、导入表结构mysql -S /tmp/mysql.sock4 test < /data/test-data-2015-09-25.sql   #7、导入表数据

最后

这是在15年的时候,自己学习MySQL的笔记,今天再拿出来分享下

作者:Real_man

链接:https://juejin.im/post/5ca55f13f265da309651a80a
来源:掘金

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

api自动化_如何在不增加人员的情况下自动化API安全程序

api自动化在这篇文章中&#xff0c;我们将撰写一篇综合文章&#xff0c;内容涉及如何在不增加人员的情况下自动执行API安全程序。 在现代世界中&#xff0c;数据对于提供者和消费者都至关重要。 数据科学的出现证明了这一事实。 对于某些组织&#xff0c;整个业务模型是建立在信…

kali用x-shell连接_良心国产工具,比Xshell好用还免费!

使用或维护Linux系统的都知道&#xff0c;我们日常对服务器的操作&#xff0c;一般都会借助SSH工具远程登录到服务器之后进行操作。常用的SSH工具有不少&#xff0c;比如&#xff1a;Xshell、Putty、SSH Secure Shell Client、secureCRT等等。民工哥使用过其中两种secureCRT和X…

ibm liberty_使用Open Liberty的开发模式最大程度地缩短周转时间

ibm liberty我上传了一个视频&#xff0c;其中显示了如何在编写部署在Open Liberty上的Enterprise Java应用程序时减少周转时间。 Maven插件的liberty:dev目标监视文件更改并立即应用更改&#xff0c;而无需重建整个部署工件。 我将展示在更改源代码&#xff0c;配置&#xff…

vue 分模块打包 脚手架_一步步从头搭建 Vue 开发环境

前言由于是工具&#xff0c;很可能你看到的时候有些工具包已经升级了&#xff0c;会有一些报错&#xff1b;这个你就需要自己探索了。工具的版本node: v10.16.0npm: v6.9.0babel: 7.5.5webpack: 4.38.0入题提醒&#xff1a;在我们开始之前&#xff0c;你先检查下你相关工具的包…

stomp java客户端_Stomp-Spring服务器端的Web套接字Java客户端

stomp java客户端问题&#xff1a; 为了分析问题&#xff0c;我不得不编写一个简单的Java Web套接字客户端站点代码&#xff0c;并使用基于stomp的Web套接字代理连接到服务器端基于Spring的应用程序。 解决方案&#xff1a; pom.xml <?xml version"1.0" encodi…

tf.metrics._将指标标签与MicroProfile Metrics 2.0一起使用

tf.metrics.从我们的应用程序发出的与业务相关的度量标准可能包含要为其测量特定度量标准的参数&#xff08;即标签或标签 &#xff09;。 从MicroProfile Metrics 2.0开始&#xff0c;可以使用API​​将标签分配给特定的指标。 声明式方法 假设我们有以下资源&#xff1a; P…

ppt课堂流程图_除了直线能设计PPT,没想到曲线也实用,太赞了!

前几天在分享PPT设计的方法时&#xff0c;收到反馈&#xff0c;问这种曲线是如何设计以及怎么用&#xff1f;其实对于曲线&#xff0c;如果用好了比直线更加有效果&#xff0c;曲线本身自带动态效果&#xff0c;看一下。除此之外&#xff0c;曲线不仅可以用在PPT中&#xff0c;…

算法分析

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff1b;旨在了解 算法分析涉及到的数学基础、时间复杂度分析法则、和其它的一些法则 和 结论&#xff1b; 【1】 数学基础 1.1&#xff09;本书将使用以下4个定义&#xff1a; 对上述定义的分析&#xff0…

java文件端点续传效果图_Java单依赖性Dockerized HTTP端点

java文件端点续传效果图在本文中&#xff0c;我们将创建一个基于Java的HTTP端点&#xff0c;使用它创建一个可执行jar&#xff0c;将其打包在Docker中并立即在本地运行。 本文面向初学者&#xff0c;他们想要寻找一个简单的演练来在Docker中运行Java应用程序。 描述Dockerize…

立镖机器人浙江_立镖在美国获2020 NextGen供应链解决方案奖

Tompkins Robotics荣获2020 NextGen供应链解决方案提供商奖汤普金斯国际被《供应链管理评论》指定为机器人技术类获奖者2020年3月20日消息Tompkins International的业务部门 Tompkins Robotics被选为第二届年度NextGen供应链奖的获得者。汤普金斯机器人技术公司是《供应链管理…

final 实例域+final类+final方法(阻止继承)

【0】README 0.1&#xff09;本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理清 “final 实例域”&#xff1b; 0.2&#xff09; 最后还增加了 阻止继承 的内容&#xff0c;涵盖了final类final方法&#xff1b; 0.3&#xff09; 引入了 内联 以及 即时编译器对…

java责任链设计模式_Java中的责任链设计模式

java责任链设计模式在本教程中&#xff0c;我们将学习如何在Java中实现责任链模式。 责任链设计模式涉及到拥有一系列负责处理请求的对象链。 当客户端发送请求时&#xff0c;第一个处理程序将尝试处理该请求。 如果可以处理&#xff0c;则请求处理在此结束。 但是&#xff0c…

机加工程序工时程序_团宠来袭 | 针对多品种小批量的机加工柔性生产解决方案...

“天下之至柔&#xff0c;驰骋天下之至坚。无有入于无间&#xff0c;吾是以知无为之有益。”老子指出&#xff0c;世间最柔弱的东西里面往往蓄着人们看不见的巨大力量&#xff0c;使得最坚强的东西也无法抵挡。就像水是最柔的东西&#xff0c;但却能穿透山地。柔性的力量不容小…

静态方法+工厂方法(静态方法用途)

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在了解 “静态方法”&#xff1b; 【1】静态方法相关 1.1&#xff09;静态方法是一种不能向对象实施操作的方法&#xff1b; 如&#xff0c;Math.pow(x, a)&#xff0c; 在运算时&#…

一致吗 驱动_iPhone 12无线充电真的香吗?

2020年10月14日凌晨1点&#xff0c;苹果发布会又来了&#xff0c;开场就是苹果CEO库克在总部贾伯斯剧院闪亮登场&#xff01;没错&#xff01;各位果粉心心念念的 iPhone 12 它走来了&#xff01;如之前爆料所言&#xff0c;本次发布会共推出了4款机型&#xff1a;iPhone 12 mi…

spring boot注释_Spring Boot中的@SpringBootConfiguration注释

spring boot注释Spring Boot中的 SpringBootConfiguration注释是一个类级别的注释&#xff0c;它指示此类提供了应用程序配置。 通常&#xff0c;具有main&#xff08;&#xff09;方法的类最适合此注释。 我们通常使用SpringBootApplication批注&#xff0c;该批注会自动继承…

selenium自动化测试_Selenium测试可实现有效的测试自动化

selenium自动化测试尽管移动应用程序的市场份额有大幅增长&#xff0c;但网络应用程序仍然具有大量的用户基础。 在部署之前&#xff0c;企业正在关注Web应用程序的质量。 这是测试发挥重要作用的地方。 与某些可以自动化的功能测试不同&#xff0c;UI测试仍然大部分是手动过程…

画时序图 visual_时序图的初步了解

1、划清边界&#xff0c;识别交互的语境所谓划清边界&#xff0c;就是要界定好自己所要画的时序图的范围&#xff0c;“学生在教务系统中查询其课程的成绩”就是所要绘制的时序图的交互内容&#xff0c;不用往上延伸到用户登录&#xff0c;也不要往下延伸到下载成绩单。识别交互…

java 初始化块

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在分享初始化块 or 静态初始化块的调用过程&#xff1b; 【1】初始化块相关 1.1&#xff09;前面讲过了 两种初始化数据域的方法&#xff1a; 在构造器中设置值 在声明中赋值&#xff…

简短介绍_中秋节的来历由来简短20字30字 中秋节的起源50字100字简介

中秋节是我国的传统佳节。按照史籍的记实&#xff0c;“中秋”一词最早呈此刻《周礼》一书中。小编整理了中秋节来历的简单介绍&#xff0c;既有二三十字的简要版&#xff0c;也有100字左右的介绍&#xff0c;让我们一起了解中秋节的起源吧。中秋节的来历由来简短20字中秋节起源…