[MySQL 调试] 编译mysqld缺少gb2312的问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

最近在安装Percona5.5.18版本MySQL时,发现字符集不全,编译参数如下

CFLAGS=”-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing”

CXX=gcc

CXXFLAGS=”-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing”

export CFLAGS CXX CXXFLAGS

cmake . \

-DCMAKE_BUILD_TYPE:STRING=Release             \

-DSYSCONFDIR:PATH=%{_prefix}            \

-DCMAKE_INSTALL_PREFIX:PATH=%{_prefix}  \

-DENABLED_PROFILING:BOOL=ON                   \

-DENABLE_DEBUG_SYNC:BOOL=OFF                  \

-DMYSQL_DATADIR:PATH=%{_prefix}/data    \

-DMYSQL_MAINTAINER_MODE:BOOL=OFF              \

-DWITH_EXTRA_CHARSETS:STRING=all  \

-DWITH_BIG_TABLES:BOOL=ON \

-DWITH_FAST_MUTEXES:BOOL=ON \

-DENABLE-PROFILING:BOOL=ON \

-DWITH_SSL:STRING=bundled                     \

-DWITH_UNIT_TESTS:BOOL=OFF                    \

-DWITH_ZLIB:STRING=bundled                    \

-DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON       \

-DWITH_PLUGINS=heap,csv,partition,innodb_plugin,myisam \

-DDEFAULT_CHARSET=gbk -DDEFAULT_COLLATION=gbk_chinese_ci -DWITH_EXTRA_CHARSETS=ALL \

-DENABLED_ASSEMBLER:BOOL=ON                   \

-DENABLED_LOCAL_INFILE:BOOL=ON                \

-DENABLED_THREAD_SAFE_CLIENT:BOOL=ON          \

-DENABLED_EMBEDDED_SERVER:BOOL=OFF             \

-DWITH_CLIENT_LDFLAGS:STRING=all-static                 \

-DINSTALL_LAYOUT:STRING=STANDALONE            \

-DCOMMUNITY_BUILD:BOOL=ON;

字符集只包含28个,而我们常用的gb2312并不在其中

在上述编译选项中,-DWITH_EXTRA_CHARSETS被定义了两次,这显然是当初设定编译参数的失误:

-DWITH_EXTRA_CHARSETS:STRING=all 和 -DWITH_EXTRA_CHARSETS=ALL

尝试把第二个-DWITH_EXTRA_CHARSETS=ALL去掉,这次包含全部字符集,有39个字符集

尝试把第二个修改为-DWITH_EXTRA_CHARSETS=all,同样为39个

怀疑跟大小写有关,于是把第二个去掉,把第一个修改为-DWITH_EXTRA_CHARSETS:STRING=ALL,这时候只剩下28个字符集了。

 

因此可以验证,在编译Percona5.5.18时,需要指定-DWITH_EXTRA_CHARSETS:STRING为小写的all,才能编译所有的字符集。

 

那么为什么会出现这种情况呢?因为在cmake文件里,编译时只匹配了complex和all两个变量,都是小写的。

字符集的编译定义在文件 cmake/character_sets.cmake中

IF(WITH_EXTRA_CHARSETS MATCHES “complex”)

  SET(CHARSETS ${CHARSETS} ${CHARSETS_COMPLEX})

ELSEIF(WITH_EXTRA_CHARSETS MATCHES “all”)

  SET(CHARSETS ${CHARSETS} ${CHARSETS_AVAILABLE})

ENDIF()

 

也就是说,只有当匹配all时,才会包含${CHARSETS_AVAILABLE}里定义的所有字符集
证明也很简单,把上面cmake文件中的小写all改成大写就可以验证了。

 

 


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
存储 Oracle 关系型数据库
mysql存储过程调试方法
mysql存储过程调试方法
341 0
|
1月前
|
关系型数据库 MySQL Java
IDEA+Mysql调试常见异常解决办法_kaic
IDEA+Mysql调试常见异常解决办法_kaic
|
5月前
|
存储 关系型数据库 MySQL
CentOS 9 环境编译部署 MySQL 8.0.30
CentOS 9 环境编译部署 MySQL 8.0.30
361 0
|
11月前
|
关系型数据库 MySQL
|
11月前
|
SQL NoSQL 关系型数据库
从零开始学习MySQL调试跟踪(2)
从零开始学习MySQL调试跟踪(2)
284 0
|
12月前
|
关系型数据库 MySQL 数据库连接
Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试
mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享出来。   本篇主要描述Qt5.9.3 msvc2017x64 + mysql8.0.16的驱动编译过程。
|
关系型数据库 MySQL 数据库
Qt+MySql开发笔记:Qt5.9.3的mingw32版本编译MySql8版本驱动并Demo连接数据库测试
之前特定的mysql版本msvc版本已经调通了,但是为了更好的跨平台,所以选择用mingw32版本,于是需要编译mysql驱动的mingw32版本的驱动库,以便提供给qt连接mysql使用。
Qt+MySql开发笔记:Qt5.9.3的mingw32版本编译MySql8版本驱动并Demo连接数据库测试
|
SQL NoSQL 关系型数据库
从零开始学习MySQL调试跟踪(2)
从零开始学习MySQL调试跟踪(2)
114 0
|
SQL NoSQL 关系型数据库
从零开始学习MySQL调试跟踪(1)
从零开始学习MySQL调试跟踪(1)
307 0
|
存储 网络协议 关系型数据库
麒麟 arm64 环境编译部署 mysql
麒麟 arm64 环境编译部署 mysql
691 0