You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译MariaDB 10.5.19调试版后ASCII字符集缺失问题求助

MariaDB 10.5.19调试编译后缺失ASCII字符集的解决思路

我正在开发MariaDB专属插件,需使用10.5.19版本的调试模式,但插件依赖的ASCII字符集在通过./BUILD/compiling-pentium64-debug脚本编译调试版后消失——标准二进制版本执行show character set;能正常看到ASCII字符集,调试版则没有。

无调试选项环境执行结果

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.19-MariaDB-1:10.5.19+maria~ubu2004 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show character set;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                    | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                 | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
| macce    | Mac Central European        | macce_general_ci    |      1 |
| macroman | Mac West European           | macroman_general_ci |      1 |
| cp852    | DOS Central European        | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode            | utf16le_general_ci  |      4 |
| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset       | binary              |      1 |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
+----------+-----------------------------+---------------------+--------+

带调试选项环境执行结果

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.19-MariaDB-debug Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show character set;
+---------+------------------+---------------------+--------+
| Charset | Description      | Default collation   | Maxlen |
+---------+------------------+---------------------+--------+
| big5    |                  | big5_chinese_ci     |      2 |
| latin1  |                  | latin1_swedish_ci   |      1 |
| latin2  |                  | latin2_general_ci   |      1 |
| ujis    |                  | ujis_japanese_ci    |      3 |
| sjis    |                  | sjis_japanese_ci    |      2 |
| tis620  |                  | tis620_thai_ci      |      1 |
| euckr   |                  | euckr_korean_ci     |      2 |
| gb2312  |                  | gb2312_chinese_ci   |      2 |
| cp1250  |                  | cp1250_general_ci   |      1 |
| gbk     |                  | gbk_chinese_ci      |      2 |
| utf8    |                  | utf8_general_ci     |      3 |
| ucs2    |                  | ucs2_general_ci     |      2 |
| utf8mb4 | UTF-8 Unicode    | utf8mb4_general_ci  |      4 |
| utf16   | UTF-16 Unicode   | utf16_general_ci    |      4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci  |      4 |
| utf32   | UTF-32 Unicode   | utf32_general_ci    |      4 |
| binary  |                  | binary              |      1 |
| cp932   |                  | cp932_japanese_ci   |      2 |
| eucjpms |                  | eucjpms_japanese_ci |      3 |
+---------+------------------+---------------------+--------+
19 rows in set (0.003 sec)

试过该版本前后的其他版本,调试版均存在此问题,以下是可行的解决思路:

  • 检查调试编译脚本的配置参数
    打开./BUILD/compiling-pentium64-debug脚本,查看其中的cmake命令是否包含禁用ASCII字符集的参数,比如-DNO_ASCII=1或类似编译宏。如果有,直接移除该参数后重新执行编译脚本。

  • 手动添加ASCII字符集编译选项
    若脚本中没有明确禁用,可手动在编译前指定启用ASCII字符集的cmake参数:

    cmake . -DWITH_DEBUG=1 -DDEFAULT_CHARSET=ascii -DDEFAULT_COLLATION=ascii_general_ci
    

    也可以直接修改编译脚本,将上述参数加入到cmake命令中,确保编译过程强制包含ASCII字符集。

  • 验证字符集文件完整性
    编译完成后,进入MariaDB安装目录的share/charsets文件夹,确认ascii.xml文件是否存在。如果缺失,从标准二进制版本的对应位置复制该文件过来,然后重启MariaDB服务,再执行show character set;验证是否加载成功。

  • 排查配置文件限制
    检查调试版使用的my.cnf(或my.ini)配置文件,查看是否存在skip-character-set-client-handshake、character_set_server=latin1等可能限制ASCII字符集加载的配置,若有则注释掉相关项,重启服务后测试。

  • 调试字符集加载流程
    若以上方法都无效,可直接跟踪源码调试:

    1. 打开MariaDB源码中的sql/charset.c文件,找到字符集初始化相关函数
    2. 使用gdb等调试工具设置断点,查看ASCII字符集是否在调试模式下被跳过初始化
    3. 检查源码中是否有条件编译分支(如#ifdef DEBUG)导致ASCII字符集未被加载

内容的提问来源于stack exchange,提问作者techmojo974

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:28:05