为什么我的 Mysql 不支持中文查询?

博客涉及MySQL表相关信息,但具体内容缺失。MySQL是常用的关系型数据库,表是其重要组成部分,可用于存储和管理数据。
为什么我的 Mysql 不支持中文查询?

 

Q:

我在写一个查询条件时的问题如下:
如我想写一个字段中包含“李”字的所有记录
$str="李";
select * from table where field like '%$str%' ;
显示的记录中除了包含”李”字的记录,还有不包含“李”字的记录。为什么?

 

A:

在MySQL中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在MySQL的很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。

  出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。

方法一:

解决方法是对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。 

方法二:

  如果你使用源码编译MySQL,可以编译MySQL时使用--with--charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了。

 方法三:

  可以使用 Mysql 的 locate 函数来判断。以上述问题为例,使用方法为:
SELECT * FROM table WHERE locate(field,'李') > 0;
本站使用的就是这种方法,感觉还不错。:P


方法四:

把您的Select语句改成这样,SELECT * FROM TABLE WHERE FIELDS LIKE BINARY '%FIND%'即可!

<think>嗯,用户现在遇到了Superset默认不支持MySQL连接的问题,需要解决编译方法。之前的对话中提到过Docker安装Superset的依赖问题,现在用户深入到了具体配置层面。 用户引用了好几段资料,其中引用[2]特别关键,里面提到要修改superset的配置文件,把SQLAlchemy的连接字符串从sqlite改成MySQL。这说明用户已经意识到需要修改数据库配置,但可能在实际操作中遇到了编译或连接问题。 从用户的问题描述看,ta似乎是在源码编译安装Superset时遇到MySQL支持的问题。引用[3]提到过构建Docker镜像的方法,引用[4]提到了版本标签控制,这些可能都是潜在解决方案。不过用户明确询问的是"编译方法",所以重点应该放在源码层面的解决方案。 需要特别注意两点技术细节: 1. 修改superset/config.py文件时必须同时更改SQLALCHEMY_DATABASE_URI和SQLALCHEMY_EXAMPLES_URI两个参数 2. MySQL连接字符串的格式必须完全正确,包括字符集参数 用户可能遇到的典型卡点包括:忘记安装mysqlclient库(这是Python连接MySQL的底层依赖),或者配置字符集时漏掉utf8mb4导致中文乱码。在编译场景下,还需要确保系统有MySQL开发头文件。 考虑到用户的技术水平(能提到"编译问题",应该有一定基础),可以在回答中包含源码修改和依赖安装的具体操作步骤。但要注意提醒关键验证点,比如测试连接时必须确保Superset服务实例能访问数据库服务器——这点在引用[1]里特别强调过。 最后生成的三个相关问题都围绕MySQL支持延伸:驱动选择、多表支持和中文兼容问题,这些都是实际部署时的高频痛点。 </think>解决 Superset 默认不支持 MySQL 连接的编译问题,需修改配置文件并**安装必要的 Python 依赖和系统库**。以下是具体步骤: --- ### 步骤 1:修改 Superset 配置文件 修改 `superset/config.py` 或创建 `.env` 文件覆盖配置,**替换 MySQL 连接信息**: ```python # 修改元数据库为 MySQL SQLALCHEMY_DATABASE_URI = 'mysql://username:password@localhost:3306/superset?charset=utf8mb4' ``` **关键修改点**: 1. 替换 `username`、`password` 为实际数据库账号密码 2. 将 `localhost:3306` 改为 MySQL 服务器地址和端口 3. 使用 `utf8mb4` 字符集支持中文及特殊字符[^2][^5] --- ### 步骤 2:安装 MySQL 编译依赖 #### 操作系统级依赖 ```bash # Ubuntu/Debian sudo apt-get install libmysqlclient-dev python3-dev # CentOS/RHEL sudo yum install mysql-devel python-devel ``` > **系统库作用**:提供 MySQL C 语言客户端的头文件,编译 `mysqlclient` Python 包时必需。 --- ### 步骤 3:安装 Python 依赖 在 Superset 虚拟环境中执行: ```bash pip install mysqlclient cryptography ``` - **`mysqlclient`**:Python 连接 MySQL 的底层驱动(依赖步骤2的系统库) - **`cryptography`**:处理数据库连接加密(MySQL 8.x 强制需要) --- ### 步骤 4:初始化元数据库 ```bash superset db upgrade # 创建/更新表结构 superset init # 初始化权限和基础数据 ``` > **注意**:需确保 MySQL 已提前创建空数据库 `superset`[^2]。 --- ### 步骤 5:验证连接 启动 Superset 后,在 Web 界面测试连接: 1. **Sources → Databases → +** 2. 填写 MySQL 连接字符串(与配置文件格式一致) 3. 点击 **Test Connection** ✅ 成功提示: `Connection looks good!`[^1] --- ### 常见问题解决 1. **编译失败** ```bash fatal error: Python.h: No such file or directory ``` **解决**:安装 Python 开发头文件 ```bash sudo apt-get install python3-dev # Ubuntu ``` 2. **连接报错 `Can't connect to MySQL server`** - 检查 MySQL 是否允许远程访问(若 Superset 与 MySQL 不在同一主机) - 验证防火墙端口(默认 3306) 3. **中文乱码** 确保连接字符串包含 `?charset=utf8mb4`[^5] --- ### 容器化部署方案 若使用 Docker,需在 Dockerfile 中安装依赖: ```dockerfile FROM apache/superset:latest # 安装系统库 RUN apt-get update && apt-get install -y libmysqlclient-dev # 安装Python驱动 RUN pip install mysqlclient cryptography ``` > 构建镜像后,通过环境变量覆盖配置: > `-e SUPERSET_DB_URI=mysql://user:pass@mysql/superset`[^3][^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值