当前位置: 首页 > news >正文

SQLAlchemy 支持特殊字符

postgresql 实践
pydantic 实践(一)基础
pydantic 实践(二)数据校验
SQLAlchemy 介绍与实践
SQLAlchemy 支持特殊字符

SQLAlchemy 支持特殊字符

  • 1. 字符集介绍分析
  • 2. MySQL 支持特殊字符
    • 2.1. 更新 MySQL 字符集为 utf8mb4
    • 2.2 更新已存在数据库的字符集
      • 2.2.1. 更新数据库字符集
      • 2.2.2. 更新数据表字符集
      • 2.2.3. 更新列的字符集
    • 2.3. 验证 MySQL 是否成功支持特殊字符
  • 3. SQLAlchemy 支持 utf8mb4
    • 3.1. 设置引擎编码方式为 utf8mb4
    • 3.2. 设置数据库表编码方式为 utf8mb4

✋✊✌️❤️⭐️✨⚡️☀️☁️❄️☔️☕️✈️⚓️⌚️☎️⌛️✉️✂️✒️✏️❌♻️✅❎Ⓜ️

为什么 MySQL 默认不支持 Emoji 表情
数据库字符集指的是数据库中存储的字符的编码方式。常见的字符集包括 utf8、utf8mb4、latin1等。字符编码是将字符映射为计算机中的二进制数据的方式。
MySQL 数据库默认使用 utf8 字符集,该字符集最多只支持3字节的字符编码。因此,当存储4字节字符(如 Emoji 表情)时,MySQL 会将其存储为乱码或截断。
Emoji 表情是一种特殊的字符,它的编码超过了utf8 字符集所能表示的范围,需要使用 utf8mb4 字符集才能正确存储和处理。

1. 字符集介绍分析

参考:https://blog.csdn.net/AggressionStorm/article/details/100040588
utf8_general_ci 不区分大小写,这个在注册用户名和邮箱的时候就要使用。
utf8_general_cs 区分大小写,如果用户名和邮箱用这个就会照成不良后果。
utf8_bin: compare strings by the binary value of each character in the string 将字符串每个字符串用二进制数据编译存储,区分大小写,而且可以存二进制的内容。
utf8_unicode_ci 校对规则仅部分支持 Unicode 校对规则算法,一些字符还是不能支持。
utf8_unicode_ci 比较准确,utf8_general_ci 速度比较快。通常情况下 utf8_general_ci 的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是 utf8_general_ci,所以新建数据库时一般选用 utf8_general_ci 就可以了

2. MySQL 支持特殊字符

参考:
https://blog.csdn.net/lsoxvxe/article/details/133953726
https://blog.csdn.net/AsuraDong/article/details/82227659

2.1. 更新 MySQL 字符集为 utf8mb4

首先,需要编辑 MySQL 的配置文件(my.cnf或my.ini),将默认字符集设置为 utf8mb4。在配置文件中找到以下配置项,并修改为:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

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

保存修改后的配置文件,并重启 MySQL 服务,使配置生效。

sudo service mysql restart

2.2 更新已存在数据库的字符集

2.2.1. 更新数据库字符集

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

2.2.2. 更新数据表字符集

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2.2.3. 更新列的字符集

ALTER TABLE table_name MODIFY column_name column_type CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2.3. 验证 MySQL 是否成功支持特殊字符

CREATE TABLE emoji_test (
  id INT PRIMARY KEY AUTO_INCREMENT,
  emoji VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);

INSERT INTO emoji_test (emoji) VALUES ('');

3. SQLAlchemy 支持 utf8mb4

参考:https://www.cnblogs.com/jassin-du/p/8987170.html
官网:https://www.osgeo.cn/sqlalchemy/orm/declarative_tables.html

3.1. 设置引擎编码方式为 utf8mb4

engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/sqldb01?charset=utf8mb4")

3.2. 设置数据库表编码方式为 utf8mb4

class UserType(Base):
    __tablename__ = 'usertype'
    id = Column(Integer, primary_key=True)
    caption = Column(String(50), default='管理员')
    # 添加配置设置编码
    __table_args__ = {
        'mysql_charset':'utf8mb4', 'mysql_collate':'utf8mb4_unicode_ci'
    }

这样生成的 SQL 语句就自动设置数据表编码为 utf8mb4了,__table_args__还可设置存储引擎、外键约束等等信息。

相关文章:

  • 16. 最接近的三数之和
  • 如何让DeepSeek-R1在内网稳定运行并实现随时随地远程在线调用
  • AIGC-头条号长文项目创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)
  • 安装教程:windows上安装oracle详细教程
  • Python 3.13 正式支持 iOS:移动开发的新篇章
  • Ludic:用Python构建HTML,告别JavaScript的繁琐开发
  • 在Linux系统中将html保存为PNG图片
  • 将 char [] str = “hello,you,world” 改为 “world,you,hello“,要求空间复杂度为1
  • 硬链接和软链接
  • uvm factory
  • SvelteKit 最新中文文档教程(13)—— Hooks
  • spring security的过滤器链
  • 基于redis实现会话保持
  • react native 0.72.5集成react-navigation
  • 使用idea开发spark程序
  • 2025年数智化电商产业带发展研究报告260+份汇总解读|附PDF下载
  • uWebSockets开发入门
  • ai-api-union项目,适配各AI厂商api
  • win32汇编环境,网络编程入门之十四
  • 不落因果与不昧因果
  • 做导购型网站/哪些浏览器可以看禁止访问的网站
  • vs asp动态网站开发教程/seo关键词优化软件
  • 男女在床上做羞羞的事的网站/seo服务顾问
  • 用ps做网站广告图/竞价外包推广
  • 苏州做网站的哪个公司比较好/可以推广赚钱的软件
  • 视觉网络网站/鹤壁网络推广哪家好