首页 > 数据库 >[MySQL]编码转换

[MySQL]编码转换

时间:2024-09-17 22:23:52浏览次数:7  
标签:编码 转换 字符集 GBK gbk MySQL 客户端

在 MySQL 中,存储的编码格式与读取的编码格式是可以不同的。如果你的表中存储的是 UTF-8 编码的数据,但客户端想要以 GBK 编码来读取数据,可以通过调整 MySQL 的字符集设置来实现。以下是几种常见的解决方案:

1. 设置客户端连接的字符集

MySQL 提供了在客户端和服务器之间指定字符集的功能。你可以通过设置 MySQL 连接时的字符集,让服务器将 UTF-8 编码的数据转换为 GBK 编码发送给客户端。可以通过以下方式实现:

方法 1:通过 SQL 语句设置字符集

在建立连接后,可以执行以下命令,将 MySQL 客户端的字符集设置为 GBK

SET NAMES gbk;

SET NAMES gbk 的含义是:

  • 客户端发送的数据:将按 GBK 编码发送给服务器。
  • 服务器返回的数据:服务器将数据从 UTF-8 转换为 GBK 返回给客户端。

方法 2:通过连接时指定字符集

如果你使用的是某种数据库驱动(如 PHP、Java、Python 等),你可以在连接到 MySQL 数据库时,指定客户端字符集为 GBK。例如,在 Python 中使用 pymysql,可以像这样指定字符集:

import pymysql

connection = pymysql.connect(
    host='localhost',
    user='root',
    password='password',
    db='your_database',
    charset='gbk'  # 指定客户端字符集为GBK
)

这样,客户端会自动将从数据库读取的数据转换为 GBK 编码。

2. 将数据转换为 GBK 后再返回

如果你不能修改 MySQL 的连接设置,可以通过 SQL 函数将 UTF-8 编码的数据转换为 GBK 后再返回。可以使用 CONVERT 函数进行编码转换:

SELECT CONVERT(column_name USING gbk) FROM your_table;

这个查询将 column_name 中的 UTF-8 编码的数据转换为 GBK 编码并返回给客户端。

3. 修改 MySQL 配置文件

你还可以修改 MySQL 的配置文件,指定默认的字符集和排序规则。在 MySQL 配置文件 my.cnfmy.ini 中,设置以下参数可以让客户端默认使用 GBK 编码:

[client]
default-character-set=gbk

[mysql]
default-character-set=gbk

[mysqld]
collation-server=gbk_chinese_ci
character-set-server=utf8mb4

这样,在不执行 SET NAMES gbk 的情况下,MySQL 客户端会默认使用 GBK 编码与服务器通信,服务器的默认字符集仍然是 UTF-8,但客户端的读取会是 GBK

4. 手动进行字符集转换

如果上述方法不可行或你更倾向于手动控制字符集转换,可以在应用程序中接收到 UTF-8 编码的数据后,通过编程语言的内置函数,将其转换为 GBK 编码。例如,在 Python 中可以这样实现:

utf8_data = cursor.fetchall()  # 获取UTF-8编码的数据
gbk_data = utf8_data.decode('utf-8').encode('gbk')  # 将其转换为GBK

这个方案是手动将数据库中的 UTF-8 编码数据转换为 GBK 编码,适用于对数据进行进一步处理时使用。

总结

  • SET NAMES gbk:通过 SQL 命令让 MySQL 自动将数据转换为 GBK 编码。
  • 在连接时指定 GBK 字符集:在连接到 MySQL 时,指定客户端使用 GBK 字符集,自动进行转换。
  • CONVERT 函数:在查询时将 UTF-8 编码的数据转换为 GBK 返回。
  • 手动编码转换:应用层在获取数据后手动转换字符集。

以上这些方法可以帮助你实现将存储为 UTF-8 的数据以 GBK 格式读取,具体选择哪种方式取决于你的应用需求和环境。

标签:编码,转换,字符集,GBK,gbk,MySQL,客户端
From: https://www.cnblogs.com/DCFV/p/18417654

相关文章

  • [官翻]mysqlbackup的乐观备份
    乐观备份可以用来提升备份和恢复体量比较大的数据库(只有少量的表经常变更)的性能。2)在大型数据库的热备份过程中(例如,以TB为单位),当备份进行时,可能会在服务器上生成巨大的重做日志文件。由于重做日志文件的增长速度快于mysqlbackup处理的速度,因此当mysqlbackup无法赶上重做日志周期,并......
  • [MySQL]深分页优化
    limit深分页为什么会变慢?先看下表结构:CREATE TABLE account (  id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',  name varchar(255) DEFAULT NULL COMMENT '账户名',  balance int(11) DEFAULT NULL COMMENT '余额',  create_time date......
  • php开启pdo与pdo_mysql扩展模块的方法
    在Windows服务器中启用PHP的PDO(PHPDataObjects)和PDO_MySQL扩展模块的方法如下:步骤1:定位 php.ini 文件找到 php.ini 文件:通常,php.ini 文件位于PHP安装目录中,例如 C:\xampp\php(如果是XAMPP环境)或者其他PHP安装路径下。如果不确定 php.ini 文件的位置,可以在PHP脚本......
  • 安装php的mysqli扩展
    安装和启用PHP的mysqli扩展通常取决于你的操作系统和PHP环境。下面分别介绍在不同环境下的操作方法:Windows环境找到 php.ini 文件:通常 php.ini 文件位于PHP安装目录中,例如 C:\xampp\php(如果是XAMPP环境)或者其他PHP安装路径下。如果不确定 php.ini 文件的位置,可以在......
  • SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial commu
    错误信息 SQLSTATE[HY000][2013]LostconnectiontoMySQLserverat'readinginitialcommunicationpacket',systemerror:111 翻译成中文为:在读取初始化数据包时失去到MySQL服务器的连接,系统错误111。通讯包初始化失败,估计是不允许连接访问引起的。解决办法以下是......
  • 基于SpringBoot+Vue+MySQL的网上租赁系统
    系统展示用户前台界面管理员后台界面系统背景  在当前共享经济蓬勃发展的背景下,网上租赁系统作为连接租赁双方的重要平台,正逐步改变着人们的消费观念和生活方式。通过构建一个基于SpringBoot、Vue.js与MySQL的网上租赁系统,我们旨在为用户提供便捷、高效、安......
  • 基于SpringBoot+Vue+MySQL的在线视频教育平台
    系统展示用户前台界面管理员后台界面系统背景  随着信息技术的飞速发展和互联网普及率的不断提高,传统教育模式正面临深刻变革。在线视频教育平台作为数字化教育的重要载体,以其灵活性强、资源丰富、覆盖广泛等优势,逐渐成为人们获取知识、提升技能的新途径。......
  • 计算机组成原理-第二章-定点数的编码表示以及扩展
    2.1定点数和浮点数表示日常生活中整数的小数点固定在最右方,可省略不写;而实数的小数点位置不固定,计算机内部数据中每一位只能是0或1,不可能出现小数点,因此计算机表示小数点通过约定小数点的位置实现。小数点位置约定在固定位置的称为定点数小数点位置可浮动的称为浮点数 因......
  • 信息学奥赛初赛天天练-91-CSP-S2023基础题3-编译命令、树的重心、拓扑排序、进制转换
    PDF文档公众号回复关键字:202409172023CSP-S选择题1单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)11以下哪个命令,能将一个名为main.cpp的C++源文件,编译并生成一个名为main的可执行文件?()Ag++-omainmain.cppBg++-omain.cppmainCg++......
  • Ubuntu24 二进制包安装mysql5.7
    目录下载mysql添加用户和用户组创建mysql-files文件执行initialize创建配置文件启动mysql生成systemd配置修改root密码添加用户,允许从远程访问遇到问题执行initialize时报错:找不到libaio.so.1包mysql拒绝使用root用户启动mysql启动没成功,且没报错mysql启动失败:unknownvalidate_p......