数据库编码 问题 mysql 修改字符集为utf8mb4

这篇具有很好参考价值的文章主要介绍了数据库编码 问题 mysql 修改字符集为utf8mb4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库编码 问题
mysql 修改字符集为utf8mb4
问题 ;
当向数据库插入表,或者在表中插入数据时,出现

ERROR 1366 (HY000): Incorrect string value: ‘\xBD\xF0\xD3\xB9’ for
column ‘name’ at row 1

原因 数据库编码方式 和 表编码方式 以及 插入数据(字符串)的编码方式不同

我们可以查看建表,建数据库语句,查看他们的编码

show create database database_name
show create table table_name

也可以使用 show full columns from emp 查看表的最详尽信息

在windows下mysql建表是默认是采用latin字符集
错误解决方式

将数据库和表的编码换成 utf8mb4 插入表的语句在记事本里另存为 utf8 编码

修改database默认的字符集

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE =
utf8mb4_unicode_ci

虽然修改了database的字符集为utf8mb4,但是实际只是修改了database新创建的表,默认使用utf8mb4,原来已经存在的表,字符集并没有跟着改变,需要手动为每张表设置字符集
修改table的字符集

只修改表默认的字符集
ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改表默认的字符集和所有字符列的字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

单独修改column默认的字符集 ALTER TABLE table_name CHANGE column_name column_name
VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

注意内容
检查字段的最大长度和索引列

字段长度
由于从utf8升级到了utf8mb4,一个字符所占用的空间也由3个字节增长到4个字节,但是我们当初创建表时,
设置的字段类型以及最大的长度没有改变。例如,你在utf8下设置某一字段的类型为TINYTEXT, 这中字段类型
最大可以容纳255字节,三个字节一个字符的情况下可以容纳85个字符,四个字节一个字符的情况下只能容纳63
个字符,如果原表中的这个字段的值有一个或多个超过了63个字符,那么转换成utf8mb4字符编码时将转换失
败,你必须先将TINYTEXT更改为TEXT等更高容量的类型之后才能继续转换字符编码
索引
在InnoDB引擎中,最大的索引长度为767字节,三个字节一个字符的情况下,索引列的字符长度最大可以达到
255,四个字节一个字符的情况下,索引的字符长度最大只能到191。如果你已经存在的表中的索引列的类型为
VARCHAR(255)那么转换utf8mb4时同样会转换失败。你需要先将VARCHAR(255)更改为VARCHAR(191)才能继续
转换字符编码

修改配置文件

SET NAMES utf8 COLLATE utf8_unicode_ci becomes SET NAMES utf8mb4
COLLATE utf8mb4_unicode_ci

vim /etc/my.cnf

对本地的mysql客户端的配置

[client] default-character-set = utf8mb4

对其他远程连接的mysql客户端的配置

[mysql] default-character-set = utf8mb4

本地mysql服务的配置

[mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
service mysqld restart

检查修改

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

修复&优化所有数据表

mysqlcheck -u root -p --auto-repair --optimize --all-databases文章来源地址https://www.toymoban.com/news/detail-403804.html

到了这里,关于数据库编码 问题 mysql 修改字符集为utf8mb4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 达梦数据库支持GB18030-2022中文编码字符集证明方法

    既然是证明就要做到有图有真相。 证明途径1:系统概览法 查看达梦数据库“管理工具”-“对象导航”-“管理服务器”-“系统概览”-“字符集编码”-”GB18030”. 看见”GB18030”字样就是证据之一。如果你没有看见这个字样,而是UTF8等其他字样,请重新安装产品吧,安装向导

    2023年04月18日
    浏览(59)
  • Oracle数据库字符集概述及修改方式

    Oracle语言环境的描述包括三部分:language、territory、characterset(语言、地域、字符集) language:主要指定服务器消息的语言,提示信息显示中文还是英文 territory:主要指定服务器的数字和日期的格式 characterset:是指字符集,一般国内数据库实际使用的字符集主要是ZHS16GBK、AL32

    2024年02月11日
    浏览(48)
  • 如何配置达梦数据库使其支持GB18030-2022中文编码字符集

    达梦版本要求,要求使用2023年4月及之后的达梦月度版版本,补丁版、临时版等不可以。 正确安装windows操作系统,windows10以下的版本未做过测试,可能系统不支持导致各种显示错误,建议用windows10及以上版本,本人亲测过window10和windows11支持. 安装一个字体覆盖全的字库,w

    2024年02月09日
    浏览(66)
  • JAVA编码规范:安全规约、mysql数据库_java后端的sql编码规范

    7、【强制】如果存储的字符串长度几乎相等,使用 char定长字符串类型 8、【强制】varchar是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张 表,用主键来对应,避免影响其它字段索引效率。 9、【强制】表

    2024年04月10日
    浏览(53)
  • MySQL数据库——MySQL UPDATE:修改数据(更新数据)

    在 MySQL 中,可以使用 UPDATE 语句来修改、更新一个或多个表的数据。 使用 UPDATE 语句修改单个表,语法格式为: 语法说明如下: 表名 : 用于指定要更新的表名称。 SET  子句: 用于指定表中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的

    2024年02月12日
    浏览(57)
  • 数据库之MySQL字符集与数据库操作

    目录 字符集 CHRARCTER SET 与COLLATION的关联 CHRARCTER SET 定义 基础操作         查看当前MySQL Server支持的 CHARACTER SET         查看特定字符集信息(主要包含默认的COLLATION 与 MAXLEN) COLLATION 定义 COLLATION后缀 基础操作         查看MySQL Server支持的COLLATION MySQL Ser

    2024年02月13日
    浏览(46)
  • 修改MySQL 数据库名称

    MySQL不支持直接修改数据库名称语法。 那么要修改数据库名称该如何操作呢?例如,我们将数据库test 修改为test2。 第一步 创建新名称对应的数据库 第二步 获取所有源库的表,即test数据库下所有表。 第三步 通过rename语法修改表schema信息 修改完成所有表后,删除原有数据库

    2024年02月12日
    浏览(43)
  • mysql数据库如何修改端口

    1. 登录mysql mysql -u root -p 2. 查看端口号 show global variables like ‘port’; ±--------------±------+ | Variable_name | Value | ±--------------±------+ | port | 3306 | ±--------------±------+ 1 row in set (0.00 sec) 3. 修改端口, 编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,

    2024年02月08日
    浏览(52)
  • Windows修改MySQL数据库密码(修改或忘记密码)  

    今天练习远程访问数据库时,为了方便访问,就想着把数据库密码改为统一的,以后我们也会经常遇到MySQL需要修改密码的情况,比如密码太简单、忘记密码等等。在这里我就借鉴其他人的方法总结几种修改MySQL密码的方法。 我就以实际操作修改root密码为例,操作系统为win

    2024年02月09日
    浏览(69)
  • Windows修改MySQL数据库密码(修改或忘记密码)

    今天练习远程访问数据库时,为了方便访问,就想着把数据库密码改为统一的,以后我们也会经常遇到MySQL需要修改密码的情况,比如密码太简单、忘记密码等等。在这里我就借鉴其他人的方法总结几种修改MySQL密码的方法。 我就以实际操作修改root密码为例,操作系统为win

    2024年02月08日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包