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

最近在安装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改成大写就可以验证了。

 

 

时间: 2024-11-08 19:55:10

[MySQL 调试] 编译mysqld缺少gb2312的问题的相关文章

install-fedora下安装mysql无法运行,缺少mysql.sock

问题描述 fedora下安装mysql无法运行,缺少mysql.sock 系统以前可能安装过mysql,后来卸载了,也可能没安装过mysql. 总之在我安装之前用 rpm -qa|grep mysql查看,有mysql-libs和mysql-server两个. 我删掉这两个后,用yum -y install mysql && yum -y install mysql-server.安装,运行不了. 一下是我现在系统中的状态 [root@s1 dsz]# rpm -qa|grep mysql

MySQL的编译安装、部署与配置

MySQL是最流行的开源数据库,而PostgreSQL是最先进的开源数据库.虽然我现在自己已经全面投入PostgreSQL的怀抱中了,但是还有许多迷途的羔羊执迷不悟,或者无力抽身,不求上进,满足于MySQL.所以目前来看还有是有MySQL的使用需求的.本文描述了*nix下MySQL的源码安装方法. 从源码编译安装MySQL tar -zxvf mysql-5.7.9-osx10.10-x86_64.tar.gz mv mysql-5.7.9-osx10.10-x86_64 /usr/local/

c#连接mysql不打开mysqld连不上

问题描述 c#连接mysql不打开mysqld连不上 想问各位大神一个问题 我用c#程序连接mysql. 在没用mysqld 打开mysql服务的时候一直连不上,只有我在命令行侠打开mysqld,而且必须打开两遍才能连上,这是什么原因呢? 解决方案 数据库连不少的时候,用mysql客户端尝试一下.看是不是数据库的问题 解决方案二: 查看一下连接字符串和配置问题 解决方案三: mysql打开需要先启动mysql的服务才行,不然mysql.exe打开后马上就会关闭了,也可以试试SQLyog - 32

使用.NET Reflector单步调试编译好的程序集

对于没有任何源代码和PDB文件的预编译程序集而言,如果没有合适的工具,调试起来并不容易.使用Red Gate的.NET Reflector可以在Visual Studio中即时反编译程序集,然后像调试有源代码的程序集一样单步跟踪它. 大家需要了解.NET Reflector(在VS和VSPro版本中)是可以集成到Visual Studio中的.标准的内置对象浏览器只显示公有方法和类(见图1),而.NET Reflector的对象浏览器(见图2)可以对编译好的程序集进行更为深入的分析,可以让用户浏

mysql主键的缺少导致备库hang

最近线上频繁的出现slave延时的情况,经排查发现为用户在删除数据的时候,由于表主键的主键的缺少,同时删除条件没有索引,或或者删除的条件过滤性极差,导致slave出现hang住,严重的影响了生产环境的稳定性,也希望通过这篇博客,来加深主键在innodb引擎中的重要性,希望用户在使用RDS,设计自己的表的时候,一定要为表加上主键,主键可以认为是innodb存储引擎的生命,下面我们就来分析一下这个案例(本案例的生产环境的binlog为row模式,对于myisam存储引擎也有同样的问题): (1).现

Linux MySQL源码安装缺少ncurses-devel包

在Red Hat Enterprise Linux Server release 5.7 上用源码安装MySQL-5.6.23时,遇到了" remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel."错误,如下所示 [root@DB-Server mysql-5.6.23]# cm

mysql主键的缺少导致备库hang住_Mysql

最近线上频繁的出现slave延时的情况,经排查发现为用户在删除数据的时候,由于表主键的主键的缺少,同时删除条件没有索引,或或者删除的条件过滤性极差,导致slave出现hang住,严重的影响了生产环境的稳定性,也希望通过这篇博客,来加深主键在innodb引擎中的重要性,希望用户在使用RDS,设计自己的表的时候,一定要为表加上主键,主键可以认为是innodb存储引擎的生命,下面我们就来分析一下这个案例(本案例的生产环境的binlog为row模式,对于myisam存储引擎也有同样的问题):(1).现象

[MySQL调试] 集成breakpad到MySQL内核

基本参考twitter的实现,代码很简单,直接调用的breakpad的接口,关键是修改cmake文件比较蛋疼. twitter的实现:https://github.com/twitter/mysql/commit/f95c5a49b4703779d05c200a9b282284248b7cb9 需要作部分修改,这里记录下我的操作步骤 1.下载google-breakpad,如果是在r1001之前的版本直接编译安装即可(未尝试),如果是checkout的最新版本,需要把源代码内的my_strchr

MySQL中的Mysqld安全相关启动选项

下列MySQLd选项影响安全: ·--allow-suspicious-udfs 该选项控制是否可以载入主函数只有xxx符的用户定义函数.默认情况下,该选项被关闭,并且只能载入至少有辅助符的UDF.这样可以防止从未包含合法UDF的共享对象文件载入函数. ·--local-infile[={0|1}] 如果用--local-infile=0启动服务器,则客户端不能使用LOCAL in LOAD DATA语句. ·--old-passwords 强制服务器为新密码生成短(pre-4.1)密码哈希.当