# 把已有MySql数据库字符集转为utf8mb4 **Repository Path**: ren3016/mysql_to_utf8mb4 ## Basic Information - **Project Name**: 把已有MySql数据库字符集转为utf8mb4 - **Description**: 把已有MySql数据库字符集转为utf8mb4 - **Primary Language**: SQL - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-02 - **Last Updated**: 2026-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: MySQL, utf8mb4, 字符集 ## README # 把已有MySql数据库字符集转为utf8mb4 ## 一、介绍 把已有MySql数据库字符集转为utf8mb4,为了在其中存储Emoji字符。 - MySQL 库:`utf8mb4` / `utf8mb4_0900_ai_ci` - 表:`utf8mb4` / `utf8mb4_0900_ai_ci` - 存储 emoji 的字段:`utf8mb4` / `utf8mb4_0900_ai_ci` - PHP mysqli 连接:`$this->conn->set_charset('utf8mb4');` ## 二、💥 备份优先,执行前先备份整库 ## 三、环境:PHP7.4.22 + MySQL8.0.27 **首选:`utf8mb4_0900_ai_ci`** > MySQL8.0 默认校对集,基于 Unicode 9.0,对 emoji、变体选择符(☝️的 FE0F)、多国语言支持最好。 **三个校对规则对比(8.0)** | 校对集 | 说明 | 是否推荐 | |---|---|---| | utf8mb4_0900_ai_ci | Unicode9.0;ai=accent-insensitive(重音不敏感),ci 大小写不敏感 | ✅ 首选 | | utf8mb4_unicode_ci | 旧版 Unicode 标准,8.0 保留用于兼容老项目 | ⭕兼容可用,不推荐新项目 | | utf8mb4_general_ci | 老旧简化规则,字符比对 bug 多 | ❌不推荐 | ## 四、PHP 连接mysqli ```php $this->conn->set_charset('utf8mb4'); ``` ## 五、改数据库默认字符集 ```sql ALTER DATABASE `你的数据库` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; ``` ## 六、改表及字段字符集 ### 6.1 单表修改字符集 ```sql ALTER TABLE `你的表名` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; ``` ### 6.2 批量生成所有表的 ALTER 语句(MySQL8.0) 在 `你的数据库` 库执行下面这条 SQL,直接输出所有表的转换 SQL,复制输出结果,然后执行。 ```sql SELECT CONCAT('ALTER TABLE `',TABLE_NAME,'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;') AS sql_text FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '你的数据库' AND TABLE_TYPE='BASE TABLE'; ``` 执行成功后会返回: ```plaintext ALTER TABLE `table1` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; ALTER TABLE `table2` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; ...... ``` ## 七、执行完成后校验脚本 ### 7.1 单独校验库的字符集 ```sql SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='你的数据库'; ``` ### 7.2 检查数据库中所有表的字符集 ```sql SELECT TABLE_NAME, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '你的数据库'; ``` ### 7.3 再检查字段级校对(抽查你存 emoji 的那张表) ```sql SHOW FULL COLUMNS FROM `你的表名`; ``` ## 八、utf8 确认转为 utf8mb4 COLLATE utf8mb4_0900_ai_ci 后 1. **存量数据(现在库里的内容):字节不变,内容不变,不会乱码、不会丢失** 2. **单条记录占用的字节大小:不会增加** 中文、英文、数字、普通符号,在 `utf8mb3` 和 `utf8mb4` 里占用字节完全一样(中文都是 3 字节) 3. **数据库文件整体大小:大概率几乎不变;极少数情况会有微小浮动,不会明显膨胀** ✅ **未来新增数据:只有当你插入 4 字节 emoji 时,才会按 4 字节存储;不插 emoji,依旧和以前占用一样** ## 九、操作顺序建议: 1. 全库备份 2. 修改数据库默认字符集 3. 运行查询生成批量 ALTER 表语句 4. 执行所有 ALTER TABLE 5. 执行校验 SQL 确认全部表 collation 6. 测试小程序提交带 emoji 文本 ## 十、测试 emoji 写入 ```sql INSERT INTO `你的表名` (你的文本字段名) VALUES ('💘 💯 💥 👌 👈 👉 👆 👇☝️ 🚴 🍁 🌎 🏛️ ⛪ 🪂 🔖 📁 🔒 🔓 ♻️ ❌ ✔️'); ``` ### 😀 常用笑脸和情绪 😀 😁 😂 🤣 😃 😄 😅 😆 😉 😊 😋 😎 😍 😘 😗 😙 😚 🙂 🤗 🤩 🤔 🤨 😐 😑 😶 🙄 😏 😣 😥 😮 😯 😪 😫 😴 😌 😛 😜 😝 🤤 😒 😓 😔 😕 🙃 🤑 😲 ☹️ 🙁 😖 😞 😟 😤 😢 😭 😦 😧 😨 😩 🤯 😬 😰 😱 😳 🤪 😵 😡 😠 🤬 😷 🤒 🤕 🤢 🤮 🤧 😇 🤠 🤡 🤥 🤫 🤭 🧐 🤓 😈 👿 👹 👺 💀 👻 👽 🤖 ### 👋 人物、手势和身体 👶🧒👦👧🧑👱👨🧔👩🧓👴👵🙍🙎🙅🙆💁🙋🙇🤦🤷🧑‍⚕️👨‍⚕️👩‍⚕️🧑‍🎓👨‍🎓👩‍🎓👮🕵️💂🥷👷🤴👸👳👲🧕🤵👰🧑‍🍼👼🎅🤶🦸🦹🧙🧚🧛🧜🧝🧞🧟💆💇🚶🏃💃🕺🕴️👯🧖🧘🤝👭👫👬💏💑👪👋🤚🖐️✋🖖👌🤌🤏✌️🤞🤟🤘🤙👈👉👆🖕👇☝️👍👎✊👊🤛🤜👏🙌👐🤲🤝🙏✍️💅🤳💪 ### 🐶 动植物、自然和食物 🐶🐱🐭🐹🐰🦊🐻🐼🐨🐯🦁🐮🐷🐸🐔🐧🐦🐤🐣🦆🦅🦉🦇🐺🐗🐴🦄🐝🐛🦋🐌🐞🐜🪲🪳🕷️🕸️🦂🦟🦠🦀🦞🦐🦑🌸🌹🌻🌼🌷🌱🍀🌿🌾🍁🍂🍃🌍🌎🌏☀️🌙⭐️🌠☁️🌧️⛈️🌈❄️☃️🔥💧🌊🍇🍈🍉🍊🍋🍌🍍🥭🍎🍏🍐🍑🍒🍓🥝🍅🥥🥑🍆🥔🥕🌽🌶️🥒🥬🥦🧄🧅🍄🥜🌰🍞🥐🥖🥞🧀🍖🍗🥩🥓🍔🍟🍕🌭🥪🌮🌯🥙🧆🥚🍳🥘🍲🥣🥗🍿🧈🧂🥫🍱🍘🍙🍚🍛🍜🍝🍠🍢🍣🍤🍥🥮🍡🥟🥠🥡🦪🍦🍧🍨🍩🍪🎂🍰🧁🥧🍫🍬🍭🍮🍯🍼🥛☕🫖🍵🍶🍾🍷🍸🍹🍺🍻🥂🥃🥤🧋🧃🧉🧊 ### 其它未分类 🐶🐱🐭🐹🐰🦊🐻🐼🐻‍❄️🐨🐯🦁🐮🐷🐽🐸🐵🙈🙉🙊🐔🐤🐺🐗🐴🦄🫎🐲🐒🐧🐦🐣🐥🪿🦆🐦‍⬛🦅🦉🦇🐝🪱🐛🦋🐌🐞🐜🪰🪲🪳🦟🦗🕷🕸🦂🐢🐍🦎🦖🦕🐙🦑🪼🦐🦞🐡🐠🐟🐬🐳🐋🦈🦭🐊🐅🐆🦓🦍🦧🦣🐘🦛🦏🐪🐫🦒🦘🦬🐃🐂🐄🫏🐎🐖🐏🐑🦙🐐🦌🐕🐩🦮️🐕‍🦺🐈🐈‍⬛🪶🪽🐓🦃🦤🦚🦜🦢🦩️🕊🐇🦝🦨️🦡🦫🦦️🦥️🐁🐀🐿🦔🐾🐉 🌵🎄🌲🌳🌴🪵🌱🌿☘️🍀🎍🪴🎋🍃🍂🍁🪺🪹🍄🐚🪸🪨🌾💐🌷🌹🥀🪻🪷🌺🌸🌼🌻 🌞🌝🌛🌜🌚🌕🌖🌗🌘🌑🌒🌓🌔🌙🌎🌍🌏🪐️⭐🌟⚡☄️💥🔥🌪☀🌤⛅🌥☁🌦🌧⛈️🌩🌨❄☃️⛄💨💧☔☂️🌊 🍏🍎🍐🍊🍋🍌🍉🍇🍓🫐🍈🍒🍑🥭🍍🥥🥝🍅🍆🥑🫛🥦🥬🥒🌶🫑🌽🥕🫒🧄🧅️🥔🍠🫚 🥐🥯🍞🥖🥨🧀 🚗🚕🚙🚌🚎🏎🚓🚑🚒🚐🛻🚚🚛🚜🛵🏍🚍🚘🚃🚋🚝🚄🚅🚈🚂🚆🚇🚊🚉✈️🛩🛰🚀🛸💺🚁🛶⛵🚤🛥🛳⛴️🚢🏗🛤 ⌚️📱📲💻⌨️🖥🖨🖱🗜💽💾💿📷📹🎥📽🎞📺📻⏰️🚽🪠🧻📡🧯⚙️🔭🔬🌐 ♿🚹🚺🚼🚻📶⏏️▶️⏸⏯️⏹⏺⏭️⏮️⏩⏪◀️🔼🔽➡️⬅️⬆️⬇️↕️↔️↪️↩️⤴️⤵️🔀🔁🔂🔄🔃📢🔕🔔🔉🔈♀️♂️