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__還可設置存儲引擎、外鍵約束等等信息。