关于mysql数据库字符编码的问题、中文乱码!

mysql 系统、库、表、字段 全部设置的utf8编码!数据写入的页面是utf8 插入数据库成功、命令行select 显示的是乱码!

第1个回答  2019-12-05
1、修改配置文件,在其中分别加入以下,重启数据库
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
2、查看系统字符集
cat
/etc/sysconfig/i18n
修改这个文件就可以实现修改系统字符集
lang=en_us.utf-8
3、
临时试修改字段字符集,然后查询数据看能否正常显示
set
names
utf8;
(会话级别的修改不会影响实际数据)
第2个回答  2020-10-28

    ASCII
    用途:用来映射简单的单字节字符,比如大小写英文字母、阿拉伯数字、常用的标点符、运算符、控制字符等。
    编码范围:U+0000 - U+007F
    注意:对于用这类字符的场景够用了,但是却无法表达比如汉字,日文等编码。
    2. UNICODE
    用途:用来映射包含 ASCII 以内的其他的所有字符。
    编码范围:U+0000 - U+10FFFF
    注意:ASCII 是 UNICODE 的子集,ASCII 编码的字符可以无损转换为 UNICODE 编码的字符。

    MySQL 常用字符集

    1. Latin1
    Latin1 是 cp1252 或者 ISO-8859-1 的别名。ISO-8859-1 编码是单字节编码,向下兼容 ASCII。
    编码范围:U+0000 - U+00FF

    ISO-8859-1 收录的字符除 ASCII 收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
    单字节内的空间都被 ISO-8859-1 编码占用,所以能够用 ISO-8859-1 编码存储、传输其他任何编码的字节流。
    比如把一个 Utf8mb4 的编码或者 GBK 的编码存入 Latin1,不会有任何问题。因为 Latin1 保留了原始的字节流,这也就是 MySQL 长期以来把 Latin1 做默认字符集的原因。
    但是由于 Latin1 对任何字符都存放字节流,造成了字符个数的浪费。
    比如:
    CHAR(10) CHARACTER SET LATIN1;CHAR(10) CHARACTER SET UTF8;

    该字段中存储字符个数 UTF8 是 Latin1 的三倍!!!
    2. GB18030
    GB18030 是中国官方标准字符集,向前兼容 GBK、GB2312,是这两个的超集。用 1、2、4 个字节分别表示一个符号。比如对一般中文字符,默认是用两个字节编码存储。Windows 系统,默认用的就是 GB18030。
    若只是存储中文字符,那 GB18030 最佳。
    原因有两点:
    1)占用空间小,比如比 UTF8 小。
    2)存储的汉字根据拼音来排序,检索快。
    3. UTF8
    UTF8 是 Unicode 的编码实现,可以存储 UNICODE 编码对应的任何字符, 这也是使用最多的一种编码。最大的特点就是变长的编码方式,用 1 到 4 个字节表示一个符号,可以根据不同的符号编码字节长度。
    字母或数字用 1 字节,汉字用 3 字节,emoji 表情符号用 4 字节。UTF8 字符集目前是使用最广泛的。
    注意!MySQL 里常说的 UTF8 是 UTF8MB3 的别名,UTF8MB3 是 UTF8MB4 的子集,UTF8MB4 才是真正的 4 字节 UTF8 字符集!
    UTF8MB3 表示最大支持 3 个字节存储字符,UTF8MB4 表示最大 4 个字节存储字符。根据实际需要和未来展望,MySQL 8.0 已经默认用 UTF8MB4 基础字符集。

本回答被网友采纳
相似回答