iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >nodejs和C语言插入mysql数据库乱码问题的解决方法
  • 404
分享到

nodejs和C语言插入mysql数据库乱码问题的解决方法

乱码解决方法语言 2022-06-04 17:06:09 404人浏览 安东尼
摘要

在这里记录了nodejs过程中的一些乱码情况,这里的乱码主要是由于网页的编码方式与nodejs的默认解码方式(utf8)不一致所造成的。这一次要说一下的是在C语言和nodejs与Mysql进行交互的时候出现

在这里记录了nodejs过程中的一些乱码情况,这里的乱码主要是由于网页的编码方式与nodejs的默认解码方式(utf8)不一致所造成的。这一次要说一下的是在C语言和nodejs与Mysql进行交互的时候出现的乱码问题。

1,由于爬虫程序在多个Docker中执行,因此我需要定期的同步每一个docker中的mysql数据到一个全局的mysql数据表中。使用nodejs进行数据同步,出现中文乱码。要知道在每一docker中的中文是不存在乱码的。原因是nodejs默认处理字符是utf8,而mysql默认是latin1,毕竟是欧洲人开发数据库。分析如下

命令show variables like 'char%';得到的结果如下:


+--------------------------+----------------------------+
| Variable_name | Value  |
+--------------------------+----------------------------+
| character_set_client | latin1  |
| character_set_connection | latin1  |
| character_set_database | latin1  |
| character_set_filesystem | binary  |
| character_set_results | latin1  |
| character_set_server | latin1  |
| character_set_system | latin1  |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

即在建立数据库的时候不特别指定,则数据库,数据表的以及数据字段的编码格式为默认值,而默认值在不更改配置文件的时候是latin1(默认安装形式)。由于utf8是较为通用的编码方式,因此我们将数据库的所有编码方式改为utf8。这里需要说明的是mysql的编码分为好几个层次,包括数据库级别,数据表级别以及数据字段级别等,我这里没有去深究这些方面,一个个去设置每个字段,每个表的编码方式,而是把所有的编码方式均设置为utf8。具体如下:

vi /etc/my.cnf修改my.cnf文件如下:


[mysqld]
datadir=/var/lib/mysql
Socket=/var/lib/mysql/mysql.sock
user=mysql
default-character-set = utf8
character_set_server = utf8
[mysql]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set = utf8
[client]
default-character-set = utf8

修改完之后,重起mysql服务service mysqld restart

命令show variables like 'char%';再次查看编码格式,得到的结果如下:


+--------------------------+----------------------------+
| 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/share/mysql/charsets/ |
+--------------------------+----------------------------+

可以看到所有的编码格式都会变成utf8,至此在建立数据库和数据表,数据字段的时候如果不特别指定,那么则会采用默认的编码方式,即现在的utf8。

2,虽然编码格式从latin1变成了utf8,但是我这里还是遇到如下的问题。

Specified key was too long; max key length is 1000 bytes

意思是key值长度大于1000个字节了,这里面的key值长度指的是定义key值时候的长度和乘以编码格式字节数,而不指实际长度。同时由于取1utf8=3字节(这个我是看别人都是这么说的,具体取多少我这边不确定),因此将其和乘以3之后就大于1000个字节了。原先latin1是没问题的(取的是1)。

解决办法即就是(1),缩减key值的定义长度。(2),不使用utf8编码。(3),因为默认DB engine 是MyIsAm,把其换成innodb。我使用方式(3),然后错误得以消除。

3,这个时候又出现了如下问题:


ERROR: ER_TOO_LONG_KEY: Specified key was too long; max key length is 767 bytes

这个问题的原因还是utf8所导致的,在latin1编码格式下,我设置了VARCHAR (512)类型为主键是没有问题的,而utf8则不行,是由于utf8编码取的是3字节,也就说,只能容纳256个utf8编码格式的VARCHAR。因此定义的时候定义为VARCHAR (255)问题得以消除,或者换一种数据类型。

4,至此我使用nodejs进行数据库的读写都是没有问题的,但是我在使用C 语言的时候,发现插入utf8编码的中文,仍然显示的是乱码。原因可能由多种,这里面我说一下我遇到的两种情况。首先确认本地系统的默认编码方式,使用locale命令进行查看(linux),通常情况应该是utf8,为了保险期间,我在C语言中加入了如下的代码显示指定编码方式


#include <locale.h>
setlocale(LC_ALL, "en_US.UTF-8");

这个时候,C语言执行mysql_query插入数据的时候,数据库仍然显示乱码。解决方法如下:


mysql_query(g_pMyConn, "set character set utf8");
mysql_query(g_pMyConn, g_strSqlStatement)

即在执行数据库插入命令前,多加上一行显示的说明使用utf8方式执行。

由于nodejs插入的时候没有C语言的问题,我就简单构想了一下如下原因,纯属个人猜测:

由于C语言使用的是mysql官方提供的api接口,而且mysql是由于欧洲人开发的,开始的时候没想到会应用那么广泛,因此使用了latin1默认编码,随着mysql应用的人越来越多,因此在支持其他编码的时候就需要在原来的接口上打补丁,因此就会出现上面显示的指定编码格式,并没有做到接口和数据库默认编码能够自动保持一致的情况。

对于nodejs来说,连接数据库的行为会由nodejs进行封装,考虑的就相对全面,因此没有C 语言中的问题。

最后我发现DB engine 从MyIsAm换成innodb,读取速度好变慢了,不知是啥原因,知道的麻烦告知一声。

以上所述是小编给大家介绍的nodejs和C语言插入mysql数据库乱码问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文档:

--结束END--

本文标题: nodejs和C语言插入mysql数据库乱码问题的解决方法

本文链接: https://www.lsjlt.com/news/12688.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nodejs和C语言插入mysql数据库乱码问题的解决方法
    在这里记录了nodejs过程中的一些乱码情况,这里的乱码主要是由于网页的编码方式与nodejs的默认解码方式(utf8)不一致所造成的。这一次要说一下的是在C语言和nodejs与MySQL进行交互的时候出现...
    99+
    2022-06-04
    乱码 解决方法 语言
  • nodejs和C语言插入mysql数据库乱码怎么办
    这篇文章将为大家详细讲解有关nodejs和C语言插入mysql数据库乱码怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在这里记录了nodejs过程中的一些乱码情况,...
    99+
    2022-10-19
  • java向mysql插入数据乱码问题的解决方法
    遇到java向mysql插入数据乱码问题,如何解决?MySQL默认编码是latin1mysql> show variables like 'character%'; +--------------------------+------...
    99+
    2023-05-31
    java mysql 乱码
  • mysql中插入表数据中文乱码问题的解决方法
    一、问题 开发中遇到将其它数据库数据插入到mysql数据库表中一直会报类似如下错误: Incorrect string value: '\xE6\x88\x91' for column 'name' at...
    99+
    2022-10-18
  • mysql中插入表数据中文乱码的解决方法
    小编给大家分享一下mysql中插入表数据中文乱码的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql中插入表数据中...
    99+
    2022-10-18
  • java向数据库插入数据显示乱码的几种问题解决
    目录1、前台乱码的问题2、前台先后台插入数据后台接收到的数据是乱码3、后台向数据库插入数据是乱码附:Java向数据库插入中文出现乱码的问题总结在开发的过程中我们经常能遇到乱码的问题,...
    99+
    2022-11-12
  • 详解php插入数据库发生乱码的原因和解决方法
    PHP是一种广泛使用的服务器端脚本语言。尽管使用PHP插入数据库是一种非常常见的操作,但在此过程中遇到乱码的问题却是不可避免的。那么,为什么PHP插入数据库会发生乱码?如何解决这个问题?本文将详细回答这些问题。1、编码问题插入数据库时发生乱...
    99+
    2023-05-14
    php
  • mysql数据库导入中文乱码的问题如何解决
    这篇文章给大家分享的是有关mysql数据库导入中文乱码的问题如何解决的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。 mysql数据库汉字乱码怎么办?如何解决mysql数...
    99+
    2022-10-18
  • php插入数据库发生乱码的原因和解决方法是什么
    本篇内容主要讲解“php插入数据库发生乱码的原因和解决方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php插入数据库发生乱码的原因和解决方法是什么”吧!编码问题插入数据库时发生乱码,其...
    99+
    2023-07-05
  • MYSQL数据迁移到ORACLE中碰到的乱码问题的解决方法
    本篇内容主要讲解“MYSQL数据迁移到ORACLE中碰到的乱码问题的解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MYSQL数据迁移到ORACLE中碰到...
    99+
    2022-10-18
  • 探讨PHP返回数据乱码问题的原因和解决方法
    PHP作为一种流行的脚本语言,通过处理HTTP请求和响应的方式,使得Web应用程序开发变得简单高效。然而,PHP返回数据乱码问题在应用程序开发过程中经常出现,这给开发人员带来了很多麻烦。本篇文章将探讨PHP返回数据乱码问题的原因和解决方法。...
    99+
    2023-05-14
  • 怎么解决MySQL命令窗口中文乱码或插入中文数据失败的问题
    这篇文章主要介绍“怎么解决MySQL命令窗口中文乱码或插入中文数据失败的问题”,在日常操作中,相信很多人在怎么解决MySQL命令窗口中文乱码或插入中文数据失败的问题问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2022-10-18
  • mysql数据库查询随机数量条目的效率问题和解决方法
    本篇内容介绍了“mysql数据库查询随机数量条目的效率问题和解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2022-10-18
  • C#中常见的数据库连接和事务处理问题及解决方法
    C#中常见的数据库连接和事务处理问题及解决方法摘要:随着互联网和信息技术的飞速发展,数据库的使用越来越广泛。作为开发人员,在编写应用程序时,数据库连接和事务处理是必不可少的部分。然而,由于各种原因,可能会出现一些常见的问题。本文将详细介绍C...
    99+
    2023-10-22
    数据库连接问题 - 连接池 - 连接字符串 - 连接超时 事务处理问题
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作