MySQL修改已存在数据的字符集

news2024/9/28 5:24:30

在实际应用中,如果一开始没有正确的设置字符集,在运行一段时间以后,才发现当前字符集不能满足要求,需要进行调整,但又不想丢弃这段时间的数据,这个时候就需要修改字符集。

在MySQL设置默认字符集和校对规则,一节我们讲到,ALTER DATABASE 或 ALTER TABLE 命令对已经存在的数据没有作用,只对新创建的表或记录生效。如果想修改已存在数据的字符集,需要先将数据导出,经过适当的调整后,再重新导入。

例 1

以下模拟的是将 gb2312 字符集的数据库修改成 gbk 字符集的数据库的过程。

1)创建 testset 数据库,设置其字符集为 gb2312,并添加数据。

mysql> CREATE TABLE test.testset(
    -> id INT(11) DEFAULT NULL,
    -> name VARCHAR(25) DEFAULT NULL
    -> )CHARSET=gb2312;
Query OK, 0 rows affected (0.10 sec)

mysql> INSERT INTO test.testset VALUES (1,'C语言');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO test.testset VALUES (2,'Java语言');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO test.testset VALUES (3,'Python语言');
Query OK, 1 row affected (0.01 sec)

2)导出 testset 表结构,命令如下:

mysqldump -uroot -p --default-character-set=gbk -d test testset> D:\testset.sql

其中,--default-character-set=gbk 表示以什么字符集连接;-d 表示只导出表结构,不导出数据。

3)打开 testset.sql 文件,修改表结构定义中的字符集为新的字符集,如下图所示。
 

修改表结构的字符集


4)确保表中的记录不再更新,导出所有记录。

mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=gb2312 test testset> D:\testdata.sql

  • --quick:该选项用于存储记录多的表。它强制 mysqldump 从服务器一次一行地查询表中的行,而不是查询所有行,并在输出前将它缓存到内存中。
  • --extended-insert:使用 INSERT 插入多行数据语法。可以使文件更小,导入文件时加速插入。
  • --no-create-info:不导出表的 CREATE TABLE 语句。
  • --default-character-set=gb2312:按照原有的字符集导出所有数据。这样导出的文件中,所有中文都是可见的,不会保存成乱码。


5)打开 testdata.sql,将 SET NAMES gb2312 修改成 SET NAMES gbk,如下图所示。
 


6)使用新的字符集创建新的数据库。

CREATE DATABASE test2 DEFAULT CHARSET gbk;


7)创建表,执行 testset.sql。

mysql -uroot -p test2 < D:\testset.sql


8)导入数据,执行 testdata.sql。

mysql -uroot -p test2 < D:\testdata.sql


9)查看 testset 表结构是否修改了字符集,以及表内数据是否丢失或乱码,SQL 语句和运行结果如下:

mysql> SHOW CREATE TABLE test2.testset \G
*************************** 1. row ***************************
       Table: testset
Create Table: CREATE TABLE `testset` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(25) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

mysql> SELECT * FROM test2.testset;
+------+------------+
| id   | name       |
+------+------------+
|    1 | C语言      |
|    2 | Java语言   |
|    3 | Python语言 |
+------+------------+
3 rows in set (0.00 sec)

注意:选择目标字符集的时候,要注意最好的是原字符集的超集,或者确定比原字符集的字库更大,否则如果目标字符集的字库小于原字符集的字库,那么目标字符集中不支持的字符导入后会变成乱码,丢失一部分数据。

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

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

相关文章

HCIE 01:基于前缀列表的BGP ORF功能

当运行BGP协议的某台设备上&#xff0c;针对入方向配置了基于ip-prefix的路由过滤&#xff0c;过滤了邻居发送的路由&#xff1b; 目前想&#xff0c;通过在peer关系的两端设备上都配置ORF功能&#xff0c;实现路由发送端只能送路由接收端过滤后的路由&#xff1b; ORF功能的说…

Django回顾2

目录 一.HTTP 1.URL介绍 2.格式&#xff1a; 3.补充&#xff1a; 二.web框架 1.什么是框架 2.什么是web框架 3.wsgi协议 基于wsgi协议的web服务器&#xff1a; 4.协议是怎么规定的 三.Django 1.MVC与MTV模型&#xff08;所有框架其实都遵循MVC架构&#xff09; 2.…

Milvus入门手册1.0

一、window环境搭建&#xff08;单机&#xff09; 1、docker安装 略 2、milvus安装 参考文档&#xff1a;https://milvus.io/docs/install_standalone-docker.md tips: &#xff08;1&#xff09;compose.yaml下载比较慢&#xff0c;可以在网络上找一份。 &#xff08;2&…

上海数字孪生技术推进制造业升级,工业物联网可视化应用加速

上海数字孪生技术推进制造业升级&#xff0c;工业物联网可视化应用加速。数字孪生技术&#xff0c;是从数字模型、数字样机的相关技术发展而来&#xff0c;而对于生产系统的数字孪生又和虚拟制造这一相关技术。数字孪生不是全新技术&#xff0c;它具有建模仿真、虚拟制造、数字…

kubenetes--kube-proxy实现负载均衡

一、Linux网络收包 要了解kube-proxy如何实现负载均衡&#xff0c;要先了解Linux网络收包机制&#xff0c;kube-proxy利用Linux的内核实现的负载均衡。 在TCP/IP网络分层模型里&#xff0c;整个协议栈被分成了物理层、链路层、网络层&#xff0c;传输层和应用层。物理层对应的…

【高并发写】库存系统设计

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

Vue 入门指南:从零开始学习 Vue 的基础知识

&#x1f95d;VUE官方文档 注意&#xff1a; &#x1f4d2;Vue 2 将于 2023 年 12 月 31 日停止维护。详见 Vue 2 延长 LTS。&#x1f4d2;Vue 2 中文文档已迁移至 v2.cn.vuejs.org。&#x1f4d2;想从 Vue 2 升级&#xff1f;请参考迁移指南。 文章目录 &#x1f341;前言&am…

后台管理系统开源项目

最近项目没有什么事做&#xff0c;就自己整理&#xff0c;修改了一些vue2&#xff0c;react的后台管理系统项目&#xff0c;方便以后有需要可以直接提取&#xff0c;当然也方便了大家 vue2技术栈 lyl-vueProjectAdmin: vue2后台管理系统 react技术栈 lyl-reactAdminProject:…

Vue3-基于husky的代码检查工作流

husky是一个git hooks工具&#xff08;git的钩子工具&#xff0c;可以在特定时机执行特定的命令&#xff09; 代码检查 背景&#xff1a;想要使代码上传到git仓库前进行代码检查&#xff0c;所以提前下载好git 打开项目终端&#xff0c;点击右上角选择进入Git Bash控制 1.如…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序数据范围&#xff1a; 1 ≤ &#xfffd; ≤ 10001≤n≤1000 &#xff0c;元素大小满足 0 ≤ &#xfffd; &#…

同为科技(TOWE)工业级炫彩桌面PDU让你的桌面更整洁

在当今社会&#xff0c;人们越来越注重生活品质与工作效率&#xff0c;桌面PDU插座是安全便捷的桌面电源设备&#xff0c;兼顾了工业机柜PDU功能、输出方式多样化与C端电气设备高颜值、实用性的特点&#xff0c;可满足消费者日常多方位用电需求。同为科技&#xff08;TOWE&…

应用密码学期末复习(1)

学习资料 应用密码学总结_应用密码学知识点总结-CSDN博客 应用密码学期末复习知识点总结_5的36次方mod97__PriDe的博客-CSDN博客 【密码学】密码学期末考试速成课&#xff0c;不挂科&#xff01;&#xff01;#高数帮_哔哩哔哩_bilibili 目录 学习资料 第一章 概述 1.1信息…

vue2通过权限控制tab标签显示和隐藏

vue2通过权限控制tab标签显示和隐藏 1、前言2、v-if实现自定义控制 1、前言 在开发过程中&#xff0c;我们可能会遇到这样一个场景&#xff1a;根据不同权限对tab栏内容进行控制&#xff0c;这时候用自定义指令v-permission就达不到我们想要的效果&#xff0c;其是将当前节点的…

FinOps和DevOps的未来会怎样?

FinOps&#xff08;或财务运营&#xff09;是一种文化实践&#xff0c;它将财务责任引入云的可变支出模型。这是一种将系统、最佳实践和文化相结合的战略方法&#xff0c;可提高组织了解云成本并做出明智决策的能力。 本质上&#xff0c;FinOps 是一个管理云运营费用&#xff…

①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态

个人简介&#xff1a;Java领域优质创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 登录功能 实现 实现基于session的登录流程&…

「阿里巴巴」裁撤量子实验室!

据内部消息&#xff0c;阿里巴巴达摩院由于预算及盈利等原因&#xff0c;已经撤裁旗下量子实验室。此次&#xff0c;共计裁减30余人。 达摩院官网已撤下量子实验室的相关介绍页面。上图&#xff1a;早先关于量子实验室的相关介绍&#xff1b;下图&#xff1a;现在达摩院官网“实…

招标采购软件如何让采购变得更轻松?

企业总是希望让采购流程更简单&#xff0c;选择更好的供应商&#xff0c;花更少的钱。采购软件的普及使原材料和服务的采购变得更容易&#xff0c;向供应商&#xff08;甚至是全球供应商&#xff09;索取信息的流程已大大简化。包括招标采购软件在内的采购技术已成为企业运营不…

11.Spring源码解析-beans解析

很明显又调用回来了&#xff0c;是典型的递归调用

璞华大数据产品入选中国信通院“铸基计划”

武汉璞华大数据技术有限公司HawkEye设备数字化管理平台产品&#xff0c;凭借优秀的产品技术能力&#xff0c;通过评估后&#xff0c;入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图&#xff08;2023&#xff09;》的工业数字化领域。 “铸基计划”是中国信通院…