Mysql修改已有数据的字符集

Mysql修改已有数据的字符集

大家好,又见面了,我是全栈君。

Mysql修改已有数据的字符集

问题

在生产环境中跑了很久,发现MysqlClient连接的字符集是默认的latin1,我们一直以为都是utf8,造成这样的误解,是因为在内网环境中,我们是源码编译的Mysql,并指定了编译选项字符集为utf8,这是Mysql的是默认字符接都是utf8.

而在外网,我们是二进制包安装,默认是latin1,虽然在my.conf中指定了[client] [mysql] [mysqld] 中字符集为utf8,这并不能保证MysqlClient连接时的字符集为utf8.所以最好是在建立连接是指定字符集,这个是能保证的.如:

//C连接 需在建立连接前设置
mysql_options(m_mysql, MYSQL_SET_CHARSET_NAME, "utf8");

由于数据是通过laint1连接到Mysql存储的,所以取数据也需要laint1的连接方式.但这个方式与预期不符,而且其他客户端连接会通过utf8连接,这就会导致乱码,必须修复成通过utf8连接存储的数据.

修复原理

通过latin1的方式建立连接把数据取出,然后以通过utf8的方式建立连接把数据存回去.

修复事例

表结构定义如下:

CREATE TABLE IF NOT EXISTS `tbl_friend` (
  `Uin` bigint(20) unsigned NOT NULL,
  `Name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`Uin`),
  UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

select CONCAT('update tbl_friend set `Name`=\'', Name, '\' where Uin=', Uin,';') from tbl_friend into outfile '/tmp/UpdateFriendName.sql' CHARACTER SET 'latin1';

 

在mysql中执行上面的语句,然后在mysql中导入/tmp/UpdateFriendName.sql文件,数据就修复了. 需要注意的是,my.cnf的[mysql]段中字符集是你修改后的字符集或者通过 mysql –default-character-set=utf8 < /tmp/UpdateFriendName.sql  指定修复后的字符集.

修复后可以在mysql中通过set names utf8/latin1,然后select Name from tbl_friend limit 10; 来看变化,

可能遇到的阻碍

如果在执行当中遇到 The MySQL server is running with the –secure-file-priv option so it cannot execute this statement 需要在my.conf中的[mysqld]增加secure_file_priv =,然后重启Mysql.

转载于:https://www.cnblogs.com/iclodq/p/7797906.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108050.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Spring Boot实战第七章-Spring Boot Web开发-Web相关配置

    Spring Boot实战第七章-Spring Boot Web开发-Web相关配置

    2021年5月16日
    99
  • SWOT分析和PEST分析[通俗易懂]

    SWOT分析和PEST分析[通俗易懂]1.SWOT分析定义:SWOT(StrengthsWeaknessOpportunityThreats)分析法,又称态势分析法或优劣势分析法,用来确定企业自身的竞争优势(strength)、竞争劣势(weakness)、机会(opportunity)和威胁(threat),从而将公司的战略与公司内部资源、外部环境有机地结合起来。如何用:首先要明白使用SWOT的目的,为什么要用它,用它的目的

    2022年6月14日
    64
  • 严重: Error filterStart

    严重: Error filterStart一般原因为:1、xml配置失误filter应配置在servlet-mapping前面(应该都知道吧).看看class配的别找不到.2、filter中某段代码未实例化(这个情况是出现最多的,要仔细检查)3、试着把tomat/server/lib目录下的commons-digester.jar,commons-beanutils

    2022年7月11日
    18
  • python3两数相加

    python3两数相加

    2021年4月18日
    138
  • vue富文本编辑器tinymce_idea代码高亮设置

    vue富文本编辑器tinymce_idea代码高亮设置1.查找IntelliJIDEA是否已经安装vue.js 注:之前有写过关于使用cmd命令搭建vue项目的全部过程,详情在此打开IDEA编辑器,快捷键Ctrl+Alt+S打开Settings(设置)——&gt;Plugins——&gt;搜索vue.js(图中已经安装,没有安装的点击InstallJetBrainsplugins…进行安装即可),安装成功后重启IDE…

    2022年8月26日
    17
  • 主板开启网络唤醒_WOL网络唤醒远程开机功能设置方法图文教程[通俗易懂]

    主板开启网络唤醒_WOL网络唤醒远程开机功能设置方法图文教程[通俗易懂]很多使用WOL远程唤醒软件的用户们都不知道怎么开启WOL网络唤醒远程开机功能,有这软件也用不了啊!今天小编就给大家介绍怎样才能设置电脑远程唤醒,不同牌子的主板、网卡、路由器在选项设置的名称和位置上都基本都不相同,但是思路都是差不多的,大家用户根据自己电脑的实际情况进行设置。1.设置主板BIOS首先,我们要在主板BIOS里面设置WOL唤醒功能的开关,大部分主板都会支持唤醒,但每个主板的…

    2022年6月2日
    324

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号